Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 正则表达式来更改字符串中的某些单词_Javascript_Regex - Fatal编程技术网

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

Javascript 正则表达式来更改字符串中的某些单词,javascript,regex,Javascript,Regex,我正试图了解正则表达式。我原以为下面的方法行得通,但不幸的是不行 我想做的是: 给定一个字符串str(见下文),我想用grade替换任何不是shade或grade的单词 str = "gravel shade water grass people water shade"; output = str.replace(/([^gravel|^shade])/g,' gravel '); 输出应等于砾石阴影砾石阴影。你的([^grade ^ shade])匹配并捕获到第一组中的任何单个字符,这

我正试图了解正则表达式。我原以为下面的方法行得通,但不幸的是不行

我想做的是:

给定一个字符串
str
(见下文),我想用
grade
替换任何不是
shade
grade
的单词

str = "gravel shade water grass people water shade";
output = str.replace(/([^gravel|^shade])/g,' gravel ');  
输出
应等于
砾石阴影砾石阴影
。你的
([^grade ^ shade])
匹配并捕获到第一组中的任何单个字符,这些字符不是
g
r
a
v
e
l
,并将它们全部替换为
grade

str = "gravel shade water grass people water shade";
output = str.replace(/([^gravel|^shade])/g,' gravel ');  
你可以用

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

图案说明:

  • \b
    -前导词边界
  • (?!(?:shade | grade)\b)
    -将排除匹配的整词
    shade
    grade
  • \w+
    -1+个单词字符(属于
    [A-Za-z0-9_33;]
    集合)
  • \b
    -尾随单词边界
var str='grade shade water grass people water shade';
var result=str.replace(/\b(?(?:阴影|砾石)\b)\w+\b/g,“砾石”);

document.body.innerHTML=结果这里有一个非正则表达式的解决方案,用于使用
拆分/联接
数组解决您的问题。map

var str=“砾石荫水草人水荫”;
var repl=str.split(“”).map(函数(w){
return(w!='grassed'&&w!='shade')?'grassed':w;})。连接(“”)
document.writeln(“+repl+”)

//=>“砾石阴影砾石阴影”
正则表达式让我毛骨悚然。。。你真的知道它将匹配什么吗?那么请快速解释,这样你就知道我的意思了。1.最外层的
[
]
之间的所有内容都被视为一个集合,从而产生一个字符。2.除非第一个字符是
^
,否则它是否定的。因此,您正在匹配所有内容,而不是
g
r
a
。。。我很想看看你到底得到了什么,虽然你没有告诉我。@RadLexus谢谢你的解释,太棒了!谢谢如果允许的话,我会给你绿色的记号。顺便说一句,这是正则表达式的良好知识!请注意,如果需求发生变化,并且您需要将任何非
grade
shade
的非空白文本块替换为
grade
,则您需要。