JavaScript中的自引用正则表达式

问题描述 投票:2回答:1

我想识别

"Str","Int","[Str]","[Int]","[[Str]]",...

我以为我可以做类似的事情

(Str|Int|\[\1\])

其中\1自引用该组。从形式语言理论中我知道,正则表达式不能“计数”,因此无法跟踪开和关[]

我可能需要上下文无关的语法,如何在JS中做到这一点?

javascript regex context-free-grammar
1个回答
5
投票

您可以将匹配组与RegExp.prototype.exec()一起使用。

var myString = "[[Str]]";
var myRegexp = /(\[*)Str(\]*)/g;
var match = myRegexp.exec(myString);
if (match[1] !== undefined && match[2] !== undefined && 
    match[1].length === match[2].length) {
   console.log('valid string');
}

来自MDN:

如果匹配成功,则exec方法返回一个数组并更新正则表达式对象的属性。返回的数组有匹配的文本作为第一项,然后每一项捕获与包含以下内容的文本匹配的括号:捕获。

如果匹配失败,则exec方法返回null。

String.prototype.replace()可以类似地使用。

© www.soinside.com 2019 - 2024. All rights reserved.