简单正则表达式/:[a-z]+;/在javascript中未按预期工作

简单正则表达式/:[a-z]+;/在javascript中未按预期工作,javascript,regex,Javascript,Regex,下面是一个非常简单的正则表达式代码,它在php和ruby中正常工作,但在JS中却不能。请求帮助我让它工作: var r = /:[a-z]+/ var s = '/a/:b/c/:d' var m = r.exec(s) // now m is [":b"] // it should be [":b", ":d"] // because that's what i get in ruby and php 将RegExp.与g(全局)修饰符一起使用意味着要在循环中使用,以获取所有匹配项 var

下面是一个非常简单的正则表达式代码,它在php和ruby中正常工作,但在JS中却不能。请求帮助我让它工作:

var r = /:[a-z]+/
var s = '/a/:b/c/:d'
var m = r.exec(s)

// now m is [":b"]
// it should be [":b", ":d"]
// because that's what i get in ruby and php

RegExp.
g
(全局)修饰符一起使用意味着要在循环中使用,以获取所有匹配项

var str = '/a/:b/c/:d'
var re  = /:[a-z]+/g
var matches;

while (matches = re.exec(str)) {
   // In array form, match is now your next match..
}
您还可以使用字符串。方法在这里

var s = '/a/:b/c/:d',
    m = s.match(/:[a-z]+/g);

console.log(m); //=> [ ':b', ':d' ]

我使用match是因为它返回数组中的所有匹配项,而对于exec,您必须像其他示例一样进行循环。

为什么在这个问题上有两个反对票。很清楚,很简洁,很具体。这比大多数新来者的帖子要好得多。@MDeSchaepmeester-因为仍然有很多挥舞着干草叉和火炬的人不了解弗兰肯雷格斯怪物的真实本质。为什么要使用
匹配
?为什么不
exec
?是的,你应该解释一下区别。出于某种原因,我觉得你做的编辑真的很有趣。不要只是把代码放在答案中,解释什么和为什么。很公平。我会解释我改变了什么,结果是什么。
var r = /:[a-z]+/g;  // i put the g tag here because it needs to match all occurrences
var s = '/a/:b/c/:d'; 
var m = s.match(r); 
console.log(m); //  [':b',':d']