更换问题

时间:2015-07-25 18:41:22

标签: javascript regex replace

过去一周我一直在处理替换和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;
}

它应该:

  1. 从特定字段中获取字符串(实际上是具有特定类的textareas)。其中一个textareas的值是例如:“miedo = {{miedo}}”。
  2. 然后将其拆分为2。
  3. 然后搜索空格“miedo”之间的第一个分割。
  4. 我找到任何匹配项,将其替换为第二次拆分({{miedo}})。
  5. 之后,我添加了一些代码来制作替换件,如果还找到了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

2 个答案:

答案 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>

&#13;
&#13;
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;
&#13;
&#13;