Javascript 为什么我的正则表达式不';不能替换多次出现?

Javascript 为什么我的正则表达式不';不能替换多次出现?,javascript,regex,Javascript,Regex,我想用JavaSript中的regex从字符串中删除“[[”和“]]”(我知道用simple replace很容易做到,但这不是我想要的) 结果字符串是abc def]]ghi[[jkl mno而不是abc def ghi jkl mno我能做什么 str = str.replace(/\[\[(.*?)\]\]/g, "$1"); 使您的*不贪婪。或 [\[\]]+ 用空字符串简单替换此项。您可以更简单地执行此操作: str = str.replace(/[\[\]]/g, "");

我想用JavaSript中的regex从字符串中删除“[[”和“]]”(我知道用simple replace很容易做到,但这不是我想要的)

结果字符串是
abc def]]ghi[[jkl mno
而不是
abc def ghi jkl mno
我能做什么

str = str.replace(/\[\[(.*?)\]\]/g, "$1");
使您的
*
不贪婪。或

[\[\]]+
空字符串

简单替换此项。您可以更简单地执行此操作:

str = str.replace(/[\[\]]/g, "");
var str=“abc[[def]]ghi[[jkl]]mno”;
str=str.replace(/[\[\]]/g,”);
警报(str)
正则表达式

/\[\[(.*)\]\]/
实际上是说,从
[[
开始,匹配尽可能多的字符(因为
*
),直到你看到
]
,所以它实际上匹配字符串

[[def]]ghi[[jkl]]
并将其替换为
[[
]
之间的匹配字符,即
def]]ghi[[jkl
,因为这是最大可能的匹配。这就是您获得

abc def]]ghi[[jkl mno]
因此,要解决这个问题,您需要使
*
像这样非贪婪

str = str.replace(/\[\[(.*?)\]\]/g, "$1");

现在,
使
*
尽可能少地匹配。因此,它首先匹配,
[[def]]
并用
def
替换它,然后匹配
[[jkl]]
并用
jkl

替换它。您也可以简单地尝试一下

> var str = "abc [[def]] ghi [[jkl]] mno";
> str.replace(/\[\[|\]\]/g, "")
'abc def ghi jkl mno'

上面的正则表达式将匹配
[[
]
符号。用空字符串替换匹配的字符将获得所需的输出。

使用非贪婪版本:
/\[\[(.*?\]\]]/g
> var str = "abc [[def]] ghi [[jkl]] mno";
> str.replace(/\[\[|\]\]/g, "")
'abc def ghi jkl mno'