首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我要从我的regex.exec中得到一个值?

为什么我要从我的regex.exec中得到一个值?
EN

Stack Overflow用户
提问于 2012-12-21 20:30:16
回答 2查看 102关注 0票数 2

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

代码语言:javascript
复制
var allTypes = "restaurant|dentist";
var typeSplitter = new RegExp("([a-zA-Z]+)");
typeSplitter.exec(allTypes);

我想要一个这样的数组:

“餐厅”,“牙医”

但我明白了:

“餐厅”,“餐厅”

我确实测试了regex 这里。我一直在摆弄这件事,可能是我不知道的

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-21 20:31:43

就这么做

代码语言:javascript
复制
allTypes.split('|');
// => ['restaurant', 'dentist']

.split也可以使用正则表达式;尽管在这种情况下它是不必要的

代码语言:javascript
复制
allTypes.split(/[|]/);

但是,如果您真的想使用regex来捕获,则必须使用.match

代码语言:javascript
复制
matches = allTypes.match(/([a-zA-Z]+)/g); // g = global modifier
票数 9
EN

Stack Overflow用户

发布于 2012-12-21 20:34:20

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

代码语言:javascript
复制
var result = "restaurant|dentist".match(/[a-zA-Z]+/g);

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

代码语言:javascript
复制
var regex = /your(Pattern)here/g;
var m;
while (m = regex.exec(input))
{
    var entireMatch = m[0];
    var firstCapture = m[1];
    // ...
    // process results
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13996829

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档