替换所有字符,包括Javascript中的空格

时间:2015-04-27 22:49:24

标签: javascript regex string

我有以下字符串s1,作为较长文本的一部分(其中没有以下模式,即此模式仅在文本中发生一次。文本还包括空格和新线)

<!-- COMPONENTS_LIST_START -->
* [line-vis](line-chart)
* [trend-vis](trend-vis)
<!-- COMPONENTS_LIST_END -->

我想用以下字符串s2替换它:

<!-- COMPONENTS_LIST_START -->
* [line-vis](line-chart)
* [trend-vis](trend-vis)
* [common-vis](common-vis)
<!-- COMPONENTS_LIST_END -->

我使用以下RegEx但它与之不匹配:

str1.replace(/<!-- COMPONENTS_LIST_START -->(\s|.)*<!-- COMPONENTS_LIST_END -->/, str2)

这不是:(\s|.)*是什么意思,包括空白字符在内的所有字符?

2 个答案:

答案 0 :(得分:2)

你正在使用贪婪的正则表达式,所以你会弄乱。顺便说一下,你可以使用[\S\s] ungreedy代替:

str1.replace(/<!-- COMPONENTS_LIST_START -->[\S\s]*?<!-- COMPONENTS_LIST_END -->/, str2)

[\S\s]*?背后的想法是匹配所有内容,直到第一次出现您的模式为止<!-- COMPONENTS_LIST_END -->

正如Trott在他的回答中指出的那样,给字符串分配一个结果:

str1 = str1.replace(/<!-- COMPONENTS_LIST_START -->[\S\s]*?<!-- COMPONENTS_LIST_END -->/, str2);

答案 1 :(得分:2)

你的正则表达式有效。您遇到的问题是.replace()不会改变字符串。它返回一个新字符串。如果您希望它改变字符串,则需要指定返回值。

str1 = str1.replace(/<!-- COMPONENTS_LIST_START -->(\s|.)*<!-- COMPONENTS_LIST_END -->/, str2);