我喜欢 \b
单词边界分隔符,但在我看来,-
不是单词分隔符。它应该是单词的一部分。
# in node
> 'peter bengtsson o-peter'.replace(/\b(pete|be)/gi, 'X')
'Xr Xngtsson o-Xr'
我希望输出是 Xr Xngtsson o-peter
。
我怎样才能做类似这样的事情,但要使 -
成为单词的一部分而不是边界?
最佳答案
使用捕获组DIY边界
使用捕获组来定义您的自定义分隔符。在这种情况下,我们的分隔符是字符串 ^
的开头或空格字符。
replaced = yourString.replace(/(^| )(?:pete|be)/gi, "$1X");
在替换中,$1
插入第 1 组括号捕获的内容,即,如果我们匹配字符串的开头,则插入一个空字符串,或者插入一个空格字符。
输出:
Xr Xngtsson o-peter
选项 2
正如@jongware 所建议的,我的正则表达式可以调整为:
(^|[^-\w])(?:pete|be)
在alternation的右侧,我们没有像原来那样匹配一个空格字符,而是匹配一个不是连字符或单词字符的字符,这更接近“扩展\”的意图b
边界”在各种情况下。您仍然需要在替换中使用第 1 组:
replaced = yourString.replace(/(^|[^-\w])(?:pete|be)/gi, "$1X");
关于javascript - Javascript 中不包括连字符的单词边界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24965209/