我正在设法使我对正则表达式有所了解。我以为以下方法会起作用,但不幸的是,它不会起作用。

我想做的事:

给定字符串str(请参见下文),我想用shade替换不是gravelgravel的任何单词。

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])匹配任意一个不是gravel|^和将它们全部替换为gravel

您可以使用

/\b(?!(?:shade|gravel)\b)\w+\b/g


请参见regex demo

模式说明:


\b-前导词边界
(?!(?:shade|gravel)\b)-否定的超前查询,将排除匹配整个词shadegravel
\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;

09-19 21:14