我想验证一个String,之后,获取一些组的所有匹配。
正则表达式:
/^<[A-Za-z0-9]>::=(<[A-Za-z0-9]>)+(\|(<[A-Za-z0-9]>)+)+$/
所以,如果我得到类似<A>::=<B><A>|<Y><A>|<Z>
的内容有效,但是如果我得到类似<A>::=<B>|
的内容是假的。
验证没有问题,问题是我想在<
和>
内部取文,因为我以后需要它。
所以,如果我得到<exparit>::=<number>|<number><exparit>
,那么我想获得["exparit", "number", "number", "exparit"]
我的代码看起来像
Rules = {
"BNF" : /^<[A-Za-z0-9]>::=(<[A-Za-z0-9]>)+(\|(<[A-Za-z0-9]>)+)+$/
};
var checkBNF = function ( bnf ) {
if ( Rules.BNF.test( bnf ) ) {
console.log('ok');
//How to get the text inside < and > ??
}
else {
console.log('no');
}
};
我非常感谢任何帮助,例如书籍,链接,示例或解决此问题。
谢谢!
答案 0 :(得分:2)
如果我可以帮助你一点,这里有以下内容:
var test = "<A>::=<B><A>|<Y><A>|<Z>";
var patt0 = /<([a-zA-Z]*)>/g; //Old and bad version
var patt1 = /[a-zA-Z]+/g;
var testRE = test.match(patt1);
alert(testRE[0]);
alert(testRE[1]);
alert(testRE[2]);
alert(testRE[3]);
alert(testRE[4]);
alert(testRE[5]);
此代码将捕获&lt;中的文本。 &gt;,而且&lt;和&gt;与它的符号。我正试图解决这个问题,如果我得到更好的结果,我会更新。
编辑:发现问题:我使用的是*而不是+!它现在完美运作了!答案 1 :(得分:1)
我所做的略有不同,因为我不确定你在<>
Rules = {
"BNF" : /^<[A-Za-z0-9]>::=(<[A-Za-z0-9]>)+(\|(<[A-Za-z0-9]>)+)+$/
};
var checkBNF = function ( bnf ) {
if ( Rules.BNF.test( bnf ) ) {
console.log('ok');
//How to get the text inside < and > ??
var patt = /\<(.*?)\>/g;
var strArray = bnf.match(patt);
for (i=0;i<strArray.length;i++) {
strArray[i] = strArray[i].replace('<','').replace('>','');
}
return strArray;
}
else {
console.log('no');
}
};
var test = "<A>::=<B><A>|<Y><A>|<Z>";
var result = checkBNF(test);
console.log(result)