我想使用像这样的JavaScript正则表达式
/marker\d+"?(\w+)"?\s/gi
在这样的字符串中:
IDoHaveMarker1"apple" IDoAlsoHaveAMarker352pear LastPointMakingmarker3134"foo"
我希望它返回一个这样的数组:
[ "apple", "pear", "foo" ]
引号要明确它们是字符串。它们不应该出现在结果中。
答案 0 :(得分:4)
如果您询问如何实际使用正则表达式:
要获得多个(全局)匹配的所有捕获,您必须在JavaScript中使用循环和exec
:
var regex = /marker\d+"?(\w+)/gi;
var result = [];
var match;
while (match = regex.exec(input)) {
result.push(match[1]);
}
(请注意,如果您只对捕获感兴趣,则可以省略尾随"?\s?
,因为它们是可选的,所以它们不会影响匹配的结果。)
不,g
不允许你在一次通话中完成所有这些操作。如果您遗漏了g
,那么exec
每次都会返回相同的匹配。
正如Blender所提到的,如果你想排除诸如Marker13"something Marker14bar
(不匹配的"
)之类的东西,你需要使用另一个捕获组和反向引用。请注意,这会将您想要的捕获推送到索引2
:
var regex = /marker\d+("?)(\w+)\1/gi;
var result = [];
var match;
while (match = regex.exec(input)) {
result.push(match[2]);
}