使用正则表达式和 JavaScript 解析 twitter @name

发布于 2024-11-06 10:36:31 字数 276 浏览 0 评论 0原文

我正在尝试使用 javascript 解析 twitter 名称标签,并且想知道这个正则表达式是否可以解决问题。我认为大部分都有效,但我只是想知道我是否正确使用了 $1 和 $2。人们能否确认这是正确的,如果是,请概括解释一下 $1 和 $2 代表什么?

str = str.replace(/([^\w])\@([\w\-]+)/gm,'$1<a href="http://twitter.com/$2" target="_blank">@$2</a>'); 

I'm trying to parse twitter name tags using javascript and was wondering if this regex would do the trick. I think most of this works, but am just wondering if I'm using the $1 and $2 properly. Can people confirm that this is right and if so, generally explain what the $1 and $2 represent?

str = str.replace(/([^\w])\@([\w\-]+)/gm,'$1<a href="http://twitter.com/$2" target="_blank">@$2</a>'); 

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

策马西风 2024-11-13 10:36:31

我认为您正在使用 $n

$n$nn
其中 nnn 是十进制数字,插入第 n 个带括号的子匹配字符串,前提是第一个参数是 RegExp 对象。

因此,您的 $1 将替换为匹配的 [^\w] ,而 $2 将替换为匹配的 [\w\ -]+。但是,我认为您在第一组中需要更多,以便您可以正确匹配 "@pancakes" 等字符串,(^|\W+) 将为您服务更好:

str = str.replace(/(^|\W+)\@([\w\-]+)/gm,'$1<a href="http://twitter.com/$2" target="_blank">@$2</a>');

您可能需要阅读 JavaScript 正则表达式

而且,多亏了 Kobi,您可以使用更简单的正则表达式,但您必须稍微更改一下替换内容:

str = str.replace(/\B@([\w-]+)/gm, '<a href="http://twitter.com/$1" target="_blank">@$1</a>');

并且当连字符不会被误认为是范围指示符时,您不需要转义连字符。

I think you're using the $n right:

$n or $nn
Where n or nn are decimal digits, inserts the nth parenthesized submatch string, provided the first argument was a RegExp object.

So your $1 will be replaced with what matched [^\w] and $2 will be replaced with what matched [\w\-]+. However, I think you want a bit more in your first group so that you can properly match strings like "@pancakes", a (^|\W+) would serve you better:

str = str.replace(/(^|\W+)\@([\w\-]+)/gm,'$1<a href="http://twitter.com/$2" target="_blank">@$2</a>');

You might want to read up on JavaScript regular expressions.

And, thanks to Kobi, you could use a simpler regular expression but you'll have to change change your replacements a little bit:

str = str.replace(/\B@([\w-]+)/gm, '<a href="http://twitter.com/$1" target="_blank">@$1</a>');

And you don't need to escape the hyphen when it can't be mistaken for a range indicator.

删除会话 2024-11-13 10:36:31

第一组 ([^\w]) 需要是可选的,因此请尝试以下操作: /([^\w])?\@([\w-]+)/gm

用于测试正则表达式的出色在线工具可以在这里找到:http://gskinner.com/RegExr/

The first group, ([^\w]), needs to be optional, so try this: /([^\w])?\@([\w-]+)/gm

A great online tool for testing a regex can be found here: http://gskinner.com/RegExr/

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文