JS 获取一个字符串经过几次表达式替换

JS get a string to go through expressions replacement a few times

我想要一种通过不同的正则表达式和不同的替换来获得 text/string 的方法

我可以在 php 中轻松做到这一点:

$pattern[] = "regex"; $replacement[] = "replace string";
$pattern[] = "regex"; $replacement[] = "replace string";
$pattern[] = "regex"; $replacement[] = "replace string";
$pattern[] = "regex"; $replacement[] = "replace string";

echo preg_replace($pattern,$replacement,$string);

我还在学习 javascript,我想 .replace() 但是有没有办法做一个表达式数组?在结束时重复 .replace() 不是技术性的。特别是如果它是一个很大的表达式列表。

preg_replace 独立运行每个模式,因此一个模式适用于先前替换的结果。

function emulate_preg_replace(regexes, replacements, text) {
    if (typeof regexes === "string" || typeof regexes.length !== "number") {
        // Single pattern
        regexes = [regexes];
    }
    var count = regexes.length;
    if (typeof replacements === "string" || typeof replacements.length !== "number") {
        // Single replacement
        var singleReplacement = replacements;
        replacements = [];
        for (var i = 0; i < count; i++) {
            replacements.push(singleReplacement);
        }
    }

    for (var i = 0; i < count; i++) {
        text = text.replace(regexes[i], replacements[i]);
    }
    return text;
}
alert(emulate_preg_replace([/c+/g, /b+/g], ["b", "a"], "bbbcccbbb")); // displays "a"

这应该适合你。

要求两个数组的元素个数相同

function REArray(contents,sArray,rArray) {
    if(sArray.length == rArray.length) {
        for(i=0;i<sArray.length;i++) {
            rx_this = new RegExp(sArray[i],"g");
            contents = contents.replace(rx_this,rArray[i]);
        }
    }
    return contents;
}

var sx = ["cat","best","\d"];
var rx = ["dog","worst","7"];
console.log(REArray("My cat is the best. He is 3.",sx,rx));

在 javascript 中的变量中存储正则表达式时,您必须转义反斜杠。 (\w 变为 \w\[b\] 变为 \[b\],等等)。阅读起来可能会非常头疼。 (匹配转义斜杠 \ 看起来像 \\)。

有些人喜欢在他们的正则表达式中使用 / 并使用替换将它们转换为 \

像这样

var rx_this;

function REArray(contents,sArray,rArray) {
    if(sArray.length == rArray.length) {
        for(i=0;i<sArray.length;i++) {
            rx_this = sArray[i].replace(/\//g,"\");
            rx_this = new RegExp(rx_this,"g");
            contents = contents.replace(rx_this,rArray[i]);
        }
    }
    return contents;
}

var sx = ["cat","best/.","[3]"];
var rx = ["dog","worst","7"];
console.log(REArray("My cat is the best. He is 3.",sx,rx));