Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/361.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_Firefox - Fatal编程技术网

JavaScript用其他单词替换文本中的任何单词

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”中转义所有特殊字符

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");