我有一个输入字符串s="blah, blah.blah blah foöblah blah"
考虑whitespace
,,
和.
作为分隔符,我希望匹配blah的所有单词出现次数,例如:用以上x
替换所需的匹配后,字符串应如x, x.x x foöblah x
我试过跟随Regex
/(?:\s|.|,|^)blah(?=\s|.|,|$)/g
但它有以下问题
blah
foöblah
匹配
编辑#1 :输入字符串s
可以有重音字符,因此使用字边界作为正则表达式将无效。
答案 0 :(得分:1)
匹配单词边界。单词边界匹配单词字符未被跟随或前面的另一个单词字符的位置。请注意,匹配中不包括匹配的字边界。换句话说,匹配的字边界的长度为零。 (不要与[\ b]混淆。)
实施例: / \ bm /匹配' m'在"月亮" ; / oo \ b /与' oo'不匹配在"月亮",因为' oo'之后是' n'这是一个单词字符; / oon \ b /匹配' oon'在"月亮",因为' oon'是字符串的结尾,因此后面没有单词字符; / \ w \ b \ w /将永远不会匹配任何内容,因为单词字符永远不会被非单词和单词字符所遵循。( Taken from here )
s = "blah, blah.blah blah fooblah blah";
console.log(
s.replace(/\bblah\b/g, 'x')
)

<小时/> 更新:
使用您自己的正则表达式,您需要在.
之前转义\.
,同时使用$1
替换使用字符串添加捕获的组值
的 Regex explanation here 强>
s = "blah, blah.blah blah fooblah blah";
console.log(
s.replace(/(\s|\.|,|^)blah(?=\s|\.|,|$)/g, '$1x')
)
&#13;
答案 1 :(得分:0)
您可以将/\bblah\b/
替换为x
。
document.writeln('blah, blah.blah blah fooblah blah'.replace(/\bblah\b/g, 'x'));
\b
确保或开头是或。
修改强>
如果您使用
(^|[^\w\x80-\xff])blah(?![\w\x80-\xff])
并替换为
$1x
我相信你会得到你想要的东西。
document.writeln('blah, blah.blah blah! foöblah blah éblah'.replace(/(^|[^\w\x80-\xff])blah(?![\w\x80-\xff])/g, '$1x'));
它类似于Pranav的解决方案,但会处理所有标点符号,例如: blah!