自引用Regex是JavaScript

时间:2014-06-14 18:23:42

标签: javascript regex context-free-grammar

我想认识

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

我以为我可以做点什么

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

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

我可能需要一个无上下文语法,我该怎么做呢?

1 个答案:

答案 0 :(得分: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()可以类似地使用。