过去一周我一直在处理替换和javascript方面的问题。我正在用Python做各种替换,到目前为止我从来没有遇到过这么多问题。请帮我? :P
这是我的代码中给我带来问题的部分:
function SaeReplacerMenuButton(buttonchosen){
var Texto = document.getElementById("wpTextbox1").value;
$("."+buttonchosen).each(function() {
var Reemplazo = this.value.split("=");
var PalabraAntigua = new RegExp(Reemplazo[0],'g'); /*Esto genera el regext*/
Texto = Texto.replace(" "+PalabraAntigua+" ", " "+Reemplazo[1]+" ");
Texto = Texto.replace(" "+PalabraAntigua+".", " "+Reemplazo[1]+".");
Texto = Texto.replace(" "+PalabraAntigua+",", " "+Reemplazo[1]+",");
}
);
document.getElementById("wpTextbox1").value = Texto;
}
它应该:
之后,我添加了一些代码来制作替换件,如果还找到了a和a。而不只是空格,而这就是问题开始的时候。当我运行脚本时,它取代了:
miedo miedo miedo miedo miedo miedo miedo miedo miedo miedo
使用:
miedo {{miedo}} {{miedo}}.{{miedo}} {{miedo}}.{{miedo}} {{miedo}}.{{miedo}} {{miedo}}.{{miedo}} miedo
但是为什么?原始文本中没有任何点,因此应该替换它的代码添加点不应该做任何事情。
注意:我对RegEx一无所知,所以这是尝试使用var +空格而不仅仅是字符串进行全局替换。有没有“简单”的方法呢?
我尝试在jsfiddle上复制它,如http://prntscr.com/7wwns1所示,但我无法使其正常工作,所以我决定上传脚本以便你们可以测试它。
它是一个.rar文件,里面有.js和.html:http://coznothingisforever.webs.com/replacerforstackoverflow.rar
答案 0 :(得分:1)
我认为你想要的功能是这样的:
function SaeReplacerMenuButton(buttonchosen){
var Texto = document.getElementById("wpTextbox1").value;
$("."+buttonchosen).each(function() {
var Reemplazo = this.value.split("=");
Texto = Texto.replace(new RegExp("(\\b)"+Reemplazo[0]+"(\\b)", "g"), "$1"+Reemplazo[1]+"$2");
});
document.getElementById("wpTextbox1").value = Texto;
}
如果你真的只想匹配空格,逗号和句号之后,RegExp可以是:
new RegExp("(\\b)"+Reemplazo[0]+"([ ,\\.])", "g")
答案 1 :(得分:1)
当你创建一个RegExp object,然后添加一个sring时,你得到一个字符串,而不是一个正则表达式。
看一下控制台写的内容:
var rx = new RegExp("word","g");
console.log(typeof(rx)); // -> object
var rx2 = " " + rx + " ";
console.log(typeof(rx2)); // -> string

因此,您无法添加空格或任何其他类似的字符串。您需要在RegExp创建时添加它们。
现在,你要找的是word boundaries。
有三种不同的职位符合词边界:
在字符串中的第一个字符之前,如果第一个字符是单词字符。
在字符串中的最后一个字符之后,如果最后一个字符是单词字符。
字符串中的两个字符之间,其中一个是单词字符,另一个不是单词字符。
不应将字边界放置在捕获组中,因为它们是零宽度断言,其作用类似于环顾,不消耗任何文本并且始终为空(因此,不需要额外的开销,包括cpaturing组或反向引用):< / p>
function replace() {
var Texto = document.getElementById("wpTextbox1").value;
var Reemplazo = "miédo={{miédo}}".split("=");
var PalabraAntigua = new RegExp("\\b"+Reemplazo[0]+"\\b(?!}})",'g');
Texto = Texto.replace(PalabraAntigua, Reemplazo[1]);
//var PalabraAntigua = new RegExp(Reemplazo[0],'g'); /*Esto genera el regext*/
//Texto = Texto.replace(" "+PalabraAntigua+" ", " "+Reemplazo[1]+" ");
//Texto = Texto.replace(" "+PalabraAntigua+".", " "+Reemplazo[1]+".");
//Texto = Texto.replace(" "+PalabraAntigua+",", " "+Reemplazo[1]+",");
document.getElementById("t").innerHTML = Texto;
}
&#13;
<input id="wpTextbox1" value="miédo miédo miédo miédo miédo miédo miédo miédo miédo miédo"/>
<input type="Submit" onclick="replace();"/>
<div id="t"/>
&#13;