Regex,替换所有以@开头的单词

Regex, replace all words starting with @

本文关键字:开头 单词 替换 Regex      更新时间:2024-01-28

我有一个正则表达式,它将所有以@开头的单词放入span标记中。我已经完成了所需要的,但我不确定我是否完全理解我在这里所做的。

content.replace(/(@'S+)/gi,"<span>$1</span>")

  1. ()的意思是匹配一个完整的单词,对吧
  2. @的意思是从@开始
  3. ''S的意思是"后面跟着任何东西直到空白"

但是,为什么不在''S后面加+号,它只匹配第一个字母呢?

任何意见都将不胜感激。

'S是任何非空白字符,a+表示一个或多个。所以

@'S->一个@,后跟一个非空白字符。

@'S+->@后跟一个或多个非空白字符

共享代码,将标签更改为链接

var p = $("p");
var string = p.text();
p.html(string.replace(/#('S+)/gi,'<a href="http://twitter.com/hashtag/$1">#$1</a>'));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p>Test you code here  #abc #123 #xyz</p>

content.replace(/(@'S+)/gi,"<span>$1</span>")

(@'S+)是捕获@后接1个或多个(+表示1个或更多)非空白字符('S是非空白字符)的捕获组

g表示全局,即替换所有实例,而不仅仅是第一个匹配
i表示不区分大小写
CCD_ 12获取由第一捕获组捕获的内容。

因此,i是不必要的,但不会影响任何事情。

/(@'S+)gi/
1st Capturing group (@'S+)
    @ matches the character @ literally
    'S+ match any non-white space character [^'r'n't'f ]
        Quantifier: Between one and unlimited times, as many times as possible, giving back as needed [greedy]
g - all the matches not just first
i - case insensitive match

''S的意思是"后面跟着任何东西直到空白"。

'S不是这个意思。它是"任何不是空白的字符",也就是说,一个字符不是空白。