Javascript使用数组中的值替换字符串中的字符串

时间:2016-02-26 10:24:38

标签: javascript str-replace

我想替换段落中的字符串,其中字符串可能是字母数字和斜杠的组合。

我做了什么:

var arrayFind = new Array('s\\if','t\\/');
var arrayReplace = new Array('If','q');
var arrayFindLength = arrayFind.length;

function replaceRightChar(str, parFind, parReplace){
    for (var i = 0; i < arrayFindLength; i++) {
        regex = new RegExp(parFind[i], "g");
        str = str.replace(regex, parReplace[i]);
    }
    alert(str);
}

var mainData="s\\if t\\/ h\\ s\\";
replaceRightChar(mainData, arrayFind, arrayReplace);

错误:

  

Uncaught SyntaxError:无效的正则表达式:/ s /:\ at pattern of pattern

2 个答案:

答案 0 :(得分:1)

我的测试不会出现任何错误。 但是,你确实遇到了双重转义的问题。

Array('s\\if','t\\/');

应该是(如果我做对了你想要的话)

Array('s\\\\if','t\\\\/');

工作示例:jsfiddle

编辑:我仍然认为问题是双重逃避。我updated my fiddle来测试所有可能的组合。

基本上我把arrayFind加倍了

var arrayFind1 = new Array('s\\if','t\\/');
var arrayFind2 = new Array('s\\\\if','t\\\\/');

和mainData

var mainData1="s\if t\/ h\\ s\\";
var mainData2="s\\if t\\/ h\\ s\\";

并将呼叫重复四次

replaceRightChar(mainData1, arrayFind1, arrayReplace);
replaceRightChar(mainData1, arrayFind2, arrayReplace);
replaceRightChar(mainData2, arrayFind1, arrayReplace);
replaceRightChar(mainData2, arrayFind2, arrayReplace);

我想第一次或第四次通话是你需要的

答案 1 :(得分:0)

为了清楚起见,我添加了另一个答案,而不是编辑现有答案。关键是,当字符串来自textarea时,它不是真的,好像它来自var str=...

几乎相同,但是为了逃避。

在这种情况下有效的方法是使用以/.../g表示法定义的正则表达式而不是new RegExp('...','g')表示法,或者双重转义。

Here a working example。代码:

var arrayFindRE = new Array(/s\\if/g,/t\\\//g);
var arrayFindStr = new Array('s\\\\if','t\\\\/');
var arrayReplace = new Array('If','q');
var arrayFindLength = arrayFindRE.length;

function replaceRegExp(str){
    for (var i = 0; i < arrayFindLength; i++) {
        str = str.replace(arrayFindRE[i], arrayReplace[i]);
    }
    alert(str);
}

function replaceString(str){
    for (var i = 0; i < arrayFindLength; i++) {
        var re = new RegExp(arrayFindStr[i],'g');
        str = str.replace(re, arrayReplace[i]);
    }
    alert(str);
}

(这里使用小提琴中的textarea值调用replaceRegExp和replaceString)。