JavaScript用其他单词替换文本中的任何单词
既然这是答案,我把最简单的答案放在这里。(感谢贝吉) 首先确保在“useWord”中转义所有特殊字符JavaScript用其他单词替换文本中的任何单词,javascript,regex,firefox,Javascript,Regex,Firefox,既然这是答案,我把最简单的答案放在这里。(感谢贝吉) 首先确保在“useWord”中转义所有特殊字符 useWord.replace(/([{}()[\]\\.?*+^$|=!:~-])/g, "\\$1"); 然后像这样替换: strIn.replace(new RexExp("\b"+userWord+"\b", "igm",replaceWord); 原来的问题得到了回答,但由于我有时也需要用单词替换符号(如$HKD),上述答案不起作用: /\$/.test("10 $ ") = tr
useWord.replace(/([{}()[\]\\.?*+^$|=!:~-])/g, "\\$1");
然后像这样替换:
strIn.replace(new RexExp("\b"+userWord+"\b", "igm",replaceWord);
原来的问题得到了回答,但由于我有时也需要用单词替换符号(如$HKD),上述答案不起作用:
/\$/.test("10 $ ") = true
/\b\$\b/.test("10 $ ") = false
更改了我的代码,因为其中有一个简单错误:
([^A-Z]||^)
应该是
([^A-Z]|^)
下面是代码的详细说明:
用户可以指定一个单词(=userWord变量)和要替换它的单词(=replaceWord变量)
例如:
usWord=“dr”;replaceWord=“Dr.”
将单词dr替换为dr
它需要不区分大小写,因此DR、DR、DR和DR将替换为DR。
问题是用户不知道正则表达式,所以需要转义“userWord”变量:(谢谢Bergi)
现在我告诉JavaScript“单词”是什么,这样“驱动器”就不会被替换,看起来像“Dr.ive”(编辑:原始代码是错误的,had | |而不是|现在它被修复了)
([^A-Z]|^)表示单词前面没有字母字符,或者单词位于行的开头。(“梦想”和“驱动力”现在可以匹配,但不能匹配“bandr”)
([^A-Z]|$)表示单词后面没有字母字符,或者单词在行尾。(“梦想”和“驱动力”现在不再匹配)
假设变量strIn是包含需要替换的单词的文本,那么现在我们可以开始替换:
strIn=strIn.replace(r,replaceWord);
如果strIn=“Julia and dr Ben.”userWord=“dr”和replaceWord=“dr.”则输出为:
“朱莉娅和本博士。”
哎呀,我仍然不知道最简单的方法是不替换第一组和最后一组(我保证明天会阅读正则表达式教程)。到目前为止,我提出的解决方案是:
strIn=strIn.replace(r,function(a,b,c,d){
return b + replaceWord + d;
});
这以前不起作用,因为我用| |代替了|
在我的应用程序中,userWord和replaceWord不是一个单一的值,而是一个数组,但在本例中,这并不重要。以下是完整的代码(工作),感谢Jim O'Brien,并使用$对不同的组进行编码,代码可以简化:
userWord="dr";
replaceWord="Dr.";
strIn="Julie was driving dr David."
userWord = userWord.
.replace(/([{}()[\]\\.?*+^$|=!:~-])/g, "\\$1");
r=new RexExp("([^A-Z]|^)("+userWord+")([^A-Z]|$)","igm");
strIn=strIn.replace(r, "$1" + replaceWord + "$2");
return strIn;
尝试使用:
此外,您的正则表达式转义还没有真正完成。使用
userWord.replace(/([{}()[\]\\.?*+^$|=!:~-])/g, "\\$1");
(管道后面的最后几个或多或少是可选的,这取决于您在正则表达式中使用转义字符串的位置)。尝试使用:
此外,您的正则表达式转义还没有真正完成。使用
userWord.replace(/([{}()[\]\\.?*+^$|=!:~-])/g, "\\$1");
(管道后面的最后几个或多或少是可选的,这取决于您在正则表达式中使用转义字符串的位置)。您是否考虑过在
replaceWord
之前/之后添加对匹配组的引用?例如,replaceWord='$1'+replaceWord+'$2'
。我没有测试过这个,但它可能会有帮助…谢谢你的回答,我必须阅读正则表达式教程,因为我不知道如何使用$1或$2。你考虑过在replaceWord
之前/之后添加匹配组的引用吗?例如,replaceWord='$1'+replaceWord+'$2'
。我没有测试过这个,但它可能会有帮助…谢谢你的回答,我必须阅读正则表达式教程,因为我不知道如何使用$1或$2。
var r = new RegExp("\b"+userWord+"\b", "ig");
return strIn.replace(r, replaceWord);
userWord.replace(/([{}()[\]\\.?*+^$|=!:~-])/g, "\\$1");