我相当确信在花了一夜试图找到答案,这是不可能的,我已经开发了一个工作 - 但是,如果有人知道更好的方法,我很乐意听到它...JavaScript正则表达式返回引用返回来自单个捕获组(多个组)的匹配数组
我已经经历了很多关于代码的迭代,以下只是真正的思路。我相信,在某些时候,我使用全局标志来匹配match(),我不记得现在是否有必要。
var str = "@[email protected]@ghi&jkl";
var regex = /^(?:@([a-z]+))?(?:&([a-z]+))?$/;
这里的想法,在此简化的代码,是可选的组1,其中有一个未指定的量,将匹配@abc,@def和@ghi。它只会捕获将会有一个或多个字母的字母字符。组2是相同的,除了符号&符合。它也应该锚定到字符串的开始和结尾。
我希望能够备份参考这两个组的所有比赛,即:
result = str.match(regex);
alert(result[1]); //abc,def,ghi
alert(result[1][0]); //abc
alert(result[1][1]); //def
alert(result[1][2]); //ghi
alert(result[2]); //jkl
我的队友说,这个工作正常,他在.NET中,不幸的是我根本无法得到它的工作 - 只有最后任何组的匹配被返回在后面参考,如可以在可看出以下几点:
(另外,使任一组可选的使一团糟一样,设置全局标志)
var str = "@[email protected]@ghi&jkl";
var regex = /(?:@([a-z]+))(?:&([a-z]+))/;
var result = str.match(regex);
alert(result[1]); //ghi
alert(result[1][0]); //g
alert(result[2]); //jkl
以下是我到达,捕捉问题的整个部分,并创建阵列自己的解决方案:
var str = "@[email protected]@ghi&jkl";
var regex = /^([@a-z]+)?(?:&([a-z]+))?$/;
var result = regex.exec(str);
alert(result[1]); //@[email protected]@ghi
alert(result[2]); //jkl
var result1 = result[1].toString();
result[1] = result1.split('@')
alert(result[1][1]); //abc
alert(result[1][2]); //def
alert(result[1][3]); //ghi
alert(result[2]); //jkl
感谢您的回复。我认为可能有更优雅的解决方案。 http://stackoverflow.com/a/1412662/1455709是我能找到的最接近的答案,但是当表达式变得复杂并且鞋子变成我之后的东西时,它没有成功... – Patrick 2012-08-09 16:15:13
不客气。祝你好运! – Pointy 2012-08-09 16:16:49