找到没有被任何字符包围的所有“:)”

时间:2014-11-27 12:10:20

标签: javascript regex

我试图改变所有":)" (没有引号)到图片。要进行匹配,笑脸必须被空格包围(或者位于字符串的开头或结尾)。

我的尝试:/(?:^|\s)\:\)(?:$|\s)/g

  

如果笑脸是(在一个字符串的开头或在它之前有一个空格)和(在一个字符串的末尾或后面有一个空格);

像这样的字符串工作正常:" :) x :) x:)" 但是这样的字符串不会:" :) :) :):)" (每隔一秒笑脸就会改变。)

据我所知,第一个笑脸与之后的空间相匹配,下一个笑脸既不在弦乐的开头,也不再有白色空间。我是正则表达式的新手,无法弄清楚如何修复逻辑:)

P.S。也许有一个捷径可以找到一个没有被任何角色包围的模式? (\b\B不适用于此)

1 个答案:

答案 0 :(得分:4)

正则表达式怎么样

(?:\s|^):\)(?=\s|$)

示例:http://regex101.com/r/zY9xA3/2

/(?:^|\s)\:\)(?:$|\s)/g

的问题
  • 正则表达式引擎使用\s之后的:)对于第二个:)我们不能拥有\s

<强>解决方案

使用正向前看,以便正则表达式不会消耗后面的空格。

  • (?=\s|$)向前看断断言:)后跟空格或字符串结尾。但不要消耗这个角色。

所做的更改

  • \::您无需逃避:

  • (?:$|\s)非捕获群体向前看正面(?=\s|$)