正则表达式,替换以@开头的所有单词

时间:2013-12-01 09:10:39

标签: javascript regex

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

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

  1. ()表示匹配整个单词,对吧?
  2. @表示以@。
  3. 开头
  4. \ S表示“在空格之前跟着任何东西”。
  5. 但是为什么如果不在\ S之后添加+符号,它只匹配第一个字母?

    任何意见都会受到赞赏。

5 个答案:

答案 0 :(得分:5)

\S是任何非空格字符,a+表示 中的一个或多个。所以

@\S - &gt; @后跟一个非空白字符。

@\S+ - &gt; @后跟一个或多个非空白字符

答案 1 :(得分:2)

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

(@\S+)是一个捕获组,捕获@后跟1个或多个(+表示1个或更多)非空白字符(\S是非空格字符)

g表示全局,即替换所有实例,而不仅仅是第一场比赛 i表示不区分大小写 $1获取第一个捕获组捕获的内容。

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

答案 2 :(得分:0)

/(@\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

答案 3 :(得分:0)

共享代码以将主题标签更改为链接

&#13;
&#13;
var p = $("p");
var string = p.text();

p.html(string.replace(/#(\S+)/gi,'<a href="http://twitter.com/hashtag/$1">#$1</a>'));
&#13;
<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>
&#13;
&#13;
&#13;

答案 4 :(得分:-2)

  

\ S表示“在空格之前有任何东西”。

这不是\S的含义。它是“任何不是空格的字符”,也就是说,一个字符不是空格。