我正在使用正则表达式来操作以空格分隔的字符串列表。当用户希望删除标签时,正则表达式用 null
替换要删除的标签,系统保存新列表。当用户开始输入标点符号作为标签的一部分时,这就遇到了麻烦(有效用例)。当我意识到使用标点符号时,我开始使用正则表达式转义:
RegExp.escape = function(s){
return String(s).replace(/[\\^$*+?.()|[\]{}]/g, '\\$&');
};
与我现有的正则表达式格式 (\bTAGTODELETE\b
) 结合使用时,这在某些情况下不匹配。
以下面的标签列表为例:thisisatest?其他测试test2测试?正在测试
如果我想从列表中删除 test?
,\btest\?\b
匹配 test?ing
。如果我想删除 thisisatest?
,\bthisisatesttest\?\b
有 0 个匹配项。
我已经尝试了几次迭代,但每一次似乎都有自己的问题。
最佳答案
因为 旁边没有单词边界?
\btest\?\B
这将匹配 test?
后跟 sapce 而不是 test?
后跟 ing
in thisisatest?其他测试test2测试?测试
输入。
\b
- 单词字符和非单词字符之间的匹配(反之亦然)
\B
- 两个单词字符或两个非单词字符之间的匹配。
?
非单词字符 space
非单词字符。所以 \B
非常适合这种情况。
关于javascript - 匹配可能包含标点符号的单词边界的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32501204/