用相同数量的字符替换正则表达式

时间:2013-11-20 22:19:00

标签: javascript regex

我需要使用我定义的字符将使用正则表达式的内容替换为相同数量的字符。

例如:

content: "abcdefghi*!?\"asd";

应该成为:

content: "-----------------";

这是我的正则表达式:

new RegExp("('|\").*('|\")", "gm")

这是我从这个答案中得到的尝试(Javascript Regex- replace sequence of characters with same number of another character):

source_text_safe = source_text.replace(new RegExp("('|\").*('|\")", "gm"), function ($0, $1, $2, $3) {
            return $1 + (new Array($2.length + 1).join("-")) + $3;
        });

但它不起作用。

在此输入上使用它:

::selected {
    color: purple
}
a {
    color: purple
}
a:hover {
    color: purple
}
a {
    color: purple
}
a:not("foobar\";{}omg") {
    content: 'example\';{} text';
    content: "example\";}{ text"
}
a {
    color: purple
}

我得到了这个输出:

::selected {
    color: purple
}
a {
    color: purple
}
a:hover {
    color: purple
}
a {
    color: purple
}
a:not("-117) {
    content: '-150;
    content: "-184
}
a {
    color: purple
} 

如果我使用正则表达式替换 null 的内容,它可以正常工作,所以这不是正则表达式的问题。

任何帮助?

2 个答案:

答案 0 :(得分:0)

替换函数需要在正则表达式中存在三个(捕获)组,但只有两个。因此$3获取匹配的偏移量,这是您获得的意外数字。有关详细信息,请参阅Mozilla JS参考中的Specifying a funciton as a parameter

使用类似"('|\")(.*)('|\")"(3组)的内容作为正则表达式。

答案 1 :(得分:0)

好吧好像我已经解决了......

source_text_safe = source_text.replace(new RegExp("('|\").*('|\")", "gm"), function ($0) {
    return (new Array($0.length + 1).join("-"));
});

感谢所有答案。