Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/455.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 正则表达式查找特殊字符之间的文本_Javascript_Regex - Fatal编程技术网

Javascript 正则表达式查找特殊字符之间的文本

Javascript 正则表达式查找特殊字符之间的文本,javascript,regex,Javascript,Regex,伙计,我很困惑。我已经看了一百万个这样的问题,但即使我简化了,也没有一个答案是有效的 我想捕获$[和]之间的文本 为什么\$\[.\]不起作用?即使我遵循方括号的指南,它也不起作用 您希望使用以下正则表达式在输入字符串中获取多个匹配项: \$\[(.*?)\] 请注意,捕获组是(.*)。问号使匹配不贪婪,这意味着它将在命中最近的结束括号后停止 var string = "stuff $[stuff] hello world $[123] blah [abc] $[def] blah"; v

伙计,我很困惑。我已经看了一百万个这样的问题,但即使我简化了,也没有一个答案是有效的

我想捕获
$[
]
之间的文本

为什么
\$\[.\]
不起作用?即使我遵循方括号的指南,它也不起作用


您希望使用以下正则表达式在输入字符串中获取多个匹配项:

\$\[(.*?)\]
请注意,捕获组是
(.*)
。问号使匹配不贪婪,这意味着它将在命中最近的结束括号后停止

var string = "stuff $[stuff] hello world $[123] blah [abc] $[def] blah";

var regex = new RegExp(/\$\[(.*?)\]/g);
var myArray;

while ((myArray = regex.exec(string)) != null) {
    alert(myArray[1])
}
如果您使用了未删节的
(.*)
作为捕获组,则只有一个匹配项从第一个开始括号开始,以最后一个结束括号结束;显然不是你想要的

此处演示:


与子字符串一起使用:
/\$\[(.*)\]/
。并与
exec一起应用

var res=/\$\[(.*)\]/g.exec(“$[和]”);
console.log(res)

console.log(res[1])
这有一个错误,当它在末尾发现两个括号时,它没有打印出正确的字符串。所以,
$[[hey]]
变成了
[hey
。有没有办法修复这个行为?@Yeats如果你有嵌套的括号,那么你应该使用一个解析器。这个正则表达式中没有“bug”。在我看来,这个问题很严重。
var string = "stuff $[stuff] hello world $[123] blah [abc] $[def] blah";

var regex = new RegExp(/\$\[(.*?)\]/g);
var myArray;

while ((myArray = regex.exec(string)) != null) {
    alert(myArray[1])
}