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
,则您需要。