我试图改变所有":)" (没有引号)到图片。要进行匹配,笑脸必须被空格包围(或者位于字符串的开头或结尾)。
我的尝试:/(?:^|\s)\:\)(?:$|\s)/g
如果笑脸是(在一个字符串的开头或在它之前有一个空格)和(在一个字符串的末尾或后面有一个空格);
像这样的字符串工作正常:" :) x :) x:)" 但是这样的字符串不会:" :) :) :):)" (每隔一秒笑脸就会改变。)
据我所知,第一个笑脸与之后的空间相匹配,下一个笑脸既不在弦乐的开头,也不再有白色空间。我是正则表达式的新手,无法弄清楚如何修复逻辑:)
P.S。也许有一个捷径可以找到一个没有被任何角色包围的模式? (\b
和\B
不适用于此)
答案 0 :(得分:4)
正则表达式怎么样
(?:\s|^):\)(?=\s|$)
示例:http://regex101.com/r/zY9xA3/2
/(?:^|\s)\:\)(?:$|\s)/g
\s
之后的:)
对于第二个:)
我们不能拥有\s
<强>解决方案强>
使用正向前看,以便正则表达式不会消耗后面的空格。
(?=\s|$)
向前看断断言:)
后跟空格或字符串结尾。但不要消耗这个角色。所做的更改
\:
至:
您无需逃避:
(?:$|\s)
非捕获群体向前看正面(?=\s|$)