我想用JavaSript中的正则表达式从字符串中删除“[[”和“]]”(我知道用简单的替换就可以很容易地做到这一点,但这不是我想要的)
var str = "abc [[def]] ghi [[jkl]] mno";
str = str.replace(/\[\[(.*)\]\]/g, "$1");
结果字符串是
abc def]] ghi [[jkl mno
而不是abc def ghi jkl mno
我该怎么办? 最佳答案
正则表达式
/\[\[(.*)\]\]/
实际上是说,从
[[
开始,匹配尽可能多的字符(由于*
),直到看到]]
为止。因此它实际上与字符串匹配,[[def]] ghi [[jkl]]
并将其替换为
[[
和]]
之间的匹配字符def]] ghi [[jkl
,因为这是最大可能的匹配项。这就是为什么你得到abc def]] ghi [[jkl mno
作为结果。要解决此问题,您需要将
*
设置为非贪婪,例如这样str = str.replace(/\[\[(.*?)\]\]/g, "$1");
现在,
?
使*
尽可能最小地匹配。因此,它首先匹配[[def]]
并将其替换为def
,然后匹配[[jkl]]
并将其替换为jkl
。关于javascript - 为什么我的RegEx不能代替多次出现?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28452077/