我想用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/

10-11 04:05