我正在设法使我对正则表达式有所了解。我以为以下方法会起作用,但不幸的是,它不会起作用。
我想做的事:
给定字符串str
(请参见下文),我想用shade
替换不是gravel
或gravel
的任何单词。
str = "gravel shade water grass people water shade";
output = str.replace(/([^gravel|^shade])/g,' gravel ');
output
应等于gravel shade gravel gravel gravel gravel shade
。我所拥有的足够接近,但有点偏离。 最佳答案
您的([^gravel|^shade])
匹配任意一个不是g
,r
,a
,v
,e
,l
,|
,^
和将它们全部替换为gravel
。
您可以使用
/\b(?!(?:shade|gravel)\b)\w+\b/g
请参见regex demo
模式说明:
\b
-前导词边界(?!(?:shade|gravel)\b)
-否定的超前查询,将排除匹配整个词shade
和gravel
\w+
-1个以上的字符(属于[A-Za-z0-9_]
设置)\b
-尾随单词边界。var str = 'gravel shade water grass people water shade';
var result = str.replace(/\b(?!(?:shade|gravel)\b)\w+\b/g, 'gravel');
document.body.innerHTML = result;