正则表达式以更改字符串中的某些单词

regex to change certain words in a string

本文关键字:单词 字符串 正则表达式      更新时间:2023-09-26

我正在尝试了解正则表达式。我以为以下内容会起作用,但不幸的是它不是。

我想做什么:

给定一个字符串str(见下文(,我想用单词 gravel 替换任何不shadegravel的单词。

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

查看正则表达式演示

模式描述:

  • '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;

以下是使用 split/joinarray.map 解决您的问题的非正则表达式解决方案:

var str = "gravel shade water grass people water shade";
var repl = str.split(' ').map(function (w) {
           return (w!='gravel' && w!= 'shade')?'gravel':w; }).join(' ')
document.writeln("<pre>" + repl + "</pre>")
//=> "gravel shade gravel gravel gravel gravel shade"