我需要一些帮助来替换javascript中的多行。 我已经阅读了有关使用标志的内容,但我不知道如何实现它们。
这是我当前的replace()
var res = str.replace(selectedText,'<b>' + selectedText + '</b>');
它适用于单行,但不适用于多行。
如果selectedText是:
AAA BBB
CCC
结果将是:
AAA BBB
CCC
任何提示?
//安布罗斯
答案 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>');