我想验证一个字符串,然后从某些组中获取所有匹配项。
正则表达式:
/^<[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');
}
};
我非常感谢任何形式的帮助,例如书籍、链接、示例或此问题的解决方案。
谢谢!
最佳答案
如果我能帮到你一点,这里有一些统计数据:
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]);
此代码将捕获 < > 内的文本,以及 < 和 > 符号。我正在尝试解决此问题,如果我得到更好的结果,我会更新。
编辑:发现问题:我使用的是 * 而不是 + !它现在完美运行!
关于javascript - 从特定组中获取匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20757385/