繁体   English   中英

为什么我从regex.exec获取单个值?

[英]Why am I getting a single value from my regex.exec?

我有一个非常简单的代码:

var allTypes = "restaurant|dentist";
var typeSplitter = new RegExp("([a-zA-Z]+)");
typeSplitter.exec(allTypes);

我想要一个这样的数组:

[“餐厅”,“牙医”]

但相反,我得到了这个:

[“餐厅”,“餐厅”]

我在这里测试了我的正则表达式。 我一直在努力摆弄这个,可能是我不知道的事情

就这样做吧

allTypes.split('|');
// => ['restaurant', 'dentist']

.split也可以采取正则表达式; 即使在这种情况下没有必要

allTypes.split(/[|]/);

但是如果你真的想使用正则表达式捕获,你必须使用.match

matches = allTypes.match(/([a-zA-Z]+)/g); // g = global modifier

因为exec只返回一个匹配和所有捕获。 第一个元素是完全匹配。 第二个是第一个捕获(模式中的第一组括号)。 由于您已将整个模式包装在括号中,因此这些值重合(并且您的括号是不必要的)。 改为使用match和全局修饰符:

var result = "restaurant|dentist".match(/[a-zA-Z]+/g);

如果你有一个更复杂的模式,并且每个匹配需要捕获组,那么exec就是你要走的路。 但是你仍然需要使用全局修饰符并在循环中运行exec

var regex = /your(Pattern)here/g;
var m;
while (m = regex.exec(input))
{
    var entireMatch = m[0];
    var firstCapture = m[1];
    // ...
    // process results
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM