Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/460.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 正则表达式来查找复杂标记_Javascript_Regex - Fatal编程技术网

Javascript 正则表达式来查找复杂标记

Javascript 正则表达式来查找复杂标记,javascript,regex,Javascript,Regex,我想使用JavaScript的正则表达式,比如 /marker\d+"?(\w+)"?\s/gi 在这样的字符串中: IDoHaveMarker1"apple" IDoAlsoHaveAMarker352pear LastPointMakingmarker3134"foo" [ "apple", "pear", "foo" ] 我希望它返回如下数组: IDoHaveMarker1"apple" IDoAlsoHaveAMarker352pear LastPointMakingmarker3

我想使用JavaScript的正则表达式,比如

/marker\d+"?(\w+)"?\s/gi
在这样的字符串中:

IDoHaveMarker1"apple" IDoAlsoHaveAMarker352pear LastPointMakingmarker3134"foo"
[ "apple", "pear", "foo" ]
我希望它返回如下数组:

IDoHaveMarker1"apple" IDoAlsoHaveAMarker352pear LastPointMakingmarker3134"foo"
[ "apple", "pear", "foo" ]

引号是为了说明它们是字符串。它们不应该出现在结果中。

如果您询问如何实际使用正则表达式:

要获取多个(全局)匹配的所有捕获,必须在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“某物Marker14bar
(不匹配的
)这样的事情,您需要使用另一个捕获组和一个反向引用。请注意,这会将您想要的捕获推到索引
2

var regex = /marker\d+("?)(\w+)\1/gi;
var result = [];
var match;
while (match = regex.exec(input)) {
    result.push(match[2]);
}

如果您询问如何实际使用正则表达式:

要获取多个(全局)匹配的所有捕获,必须在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“某物Marker14bar
(不匹配的
)这样的事情,你需要使用另一个捕获组和一个反向引用。请注意,这会将所需捕获推送到索引
2

var regex = /marker\d+("?)(\w+)\1/gi;
var result = [];
var match;
while (match = regex.exec(input)) {
    result.push(match[2]);
}

让第二个
也成为可选的?这就是我的意思。现在我如何获得数组?你试过谷歌搜索“javascript regex”吗?让第二个
也成为可选的?这就是我的意思。现在我如何获得数组?你试过谷歌搜索“javascript正则表达式”吗?我会使用
/marker\d+(“?)(\w+)\1/ig
作为正则表达式,因为它希望引号成对出现。@Blender是的,考虑过这一点,但后来我决定删除第二个
。你可以在数组中填充匹配项(如下:)然后得到OP想要的返回结果。@JasonPerske这就是我指的。你说得对,也许应该在推送中加入代码片段instead@m.buettner你是我上个月见过的第二个在不到4个月的时间里取得如此高分数的人。我觉得我使用得不太正确:P可能与编写经过深思熟虑的可靠答案有关。我将使用
/marker\d+(“?)(\w+\1/ig
作为正则表达式,因为它希望引号成对出现。@Blender是的,考虑过了,但后来我决定删除第二个
总之。您可以将匹配项填充到一个数组中(如:)并获得OP要查找的返回结果。@JasonPerske这就是我所指的。你说得对,也许应该在推送中加入代码片段instead@m.buettner你是我上个月见过的第二个在不到4个月的时间里取得如此高分数的人。我觉得我使用得不太正确:P可能与写出深思熟虑的答案有关