【问题标题】:Regex, replace all words starting with @正则表达式,替换所有以@开头的单词
【发布时间】:2013-12-01 09:10:39
【问题描述】:

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

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

  1. () 表示匹配整个单词,对吧?
  2. @ 表示以@开头。
  3. \S 表示“后跟任何内容,直到出现空格”。

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

任何意见将不胜感激。

【问题讨论】:

标签: javascript regex


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

    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>

    【讨论】:

      【解决方案3】:
      content.replace(/(@\S+)/gi,"<span>$1</span>")
      

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

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

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

      【讨论】:

        【解决方案4】:
        /(@\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
        

        【讨论】:

          【解决方案5】:

          \S 的意思是“后面跟着任何东西,直到出现空格”。

          \S 不是这个意思。它是“任何不是空格的字符”,即 一个 不是空格的字符。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-05-21
            • 1970-01-01
            • 2011-01-24
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多