用javascript replace()替换多行

时间:2014-05-30 08:47:19

标签: javascript replace flags

我需要一些帮助来替换javascript中的多行。 我已经阅读了有关使用标志的内容,但我不知道如何实现它们。

这是我当前的replace()

var res = str.replace(selectedText,'<b>' + selectedText + '</b>');

它适用于单行,但不适用于多行。

如果selectedText是:

AAA BBB

CCC

结果将是:

AAA BBB

CCC

任何提示?

//安布罗斯

1 个答案:

答案 0 :(得分:0)

如果为第一个参数赋予replace字符串,则只替换第一个匹配项。要替换所有匹配,您必须传入一个正则表达式作为第一个参数,并在其上使用g标志。这会将所有a替换为b s:

var str = "a a a a";
str = str.replace(/a/g, 'b');
console.log(str); // "b b b b"

因此,您需要为selectedText创建正则表达式。您可以通过new RegExp(selectedText, "g")

执行此操作
var res = str.replace(new RegExp(selectedText, "g"),'<b>' + selectedText + '</b>');

... 如果selectedText中包含正则表达式中具有特殊含义的任何字符,则必须转义它们。可悲的是,JavaScript没有这样做的内置函数,但是如果你搜索一下你可以找到几个函数的例子来做到这一点。 This answer on SO也有一些选择。

如果我们使用this answer to that question 中的RegExp.escape(它有点矫枉过正,但其过度杀伤力相当无害)

RegExp.escape= function(s) {
    return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
};

...然后:

var res = str.replace(new RegExp(RegExp.escape(selectedText), "g"),'<b>' + selectedText + '</b>');