Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.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,通常,当您执行类似于'test.match(/(e)/)的操作时,您会收到一个数组['e','e'],其中第一个元素是匹配本身,第二个元素来自选择器(大括号),但当使用全局修饰符(如'test.match(/(e)/g)时,它将忽略匹配,如果我根本不使用选择器,它就不会 我想知道是否以及在何处指定了以下行为(使用铬进行此测试) 如果未设置全局标志(g),则数组的元素0包含整个匹配,而元素1到n包含任何子匹配。此行为与未设置全局标志时exec方法(正则表达式)(JavaScript)的行为相同。如

通常,当您执行类似于
'test.match(/(e)/)
的操作时,您会收到一个数组
['e','e']
,其中第一个元素是匹配本身,第二个元素来自选择器(大括号),但当使用全局修饰符(如
'test.match(/(e)/g)
时,它将忽略匹配,如果我根本不使用选择器,它就不会

我想知道是否以及在何处指定了以下行为(使用铬进行此测试)

如果未设置全局标志(g),则数组的元素0包含整个匹配,而元素1到n包含任何子匹配。此行为与未设置全局标志时exec方法(正则表达式)(JavaScript)的行为相同。如果设置了全局标志,则元素0到n包含发生的所有匹配

换句话说,当提供了
g
时,
match
只收集最上面的匹配项,而忽略任何捕获组

例如:

> s = "Foo Bar"
"Foo Bar"
> s.match(/([A-Z])([a-z]+)/)
["Foo", "F", "oo"]
> s.match(/([A-Z])([a-z]+)/g)
["Foo", "Bar"]
没有像python
findall
那样从所有匹配项中收集所有组的内置程序,但是使用
exec
很容易编写:

function matchAll(re, str) {
    var p, r = [];
    while(p = re.exec(str))
        r.push(p);
    return r;
}
matchAll(/([A-Z])([a-z]+)/g, "Foo Bar")
结果:

[
Array[3]
0: "Foo"
1: "F"
2: "oo"
index: 0
input: "Foo Bar"
length: 3
__proto__: Array[0]
, 
Array[3]
0: "Bar"
1: "B"
2: "ar"
index: 4
input: "Foo Bar"
length: 3
__proto__: Array[0]
]
如果未设置全局标志(g),则数组的元素0包含整个匹配,而元素1到n包含任何子匹配。此行为与未设置全局标志时exec方法(正则表达式)(JavaScript)的行为相同。如果设置了全局标志,则元素0到n包含发生的所有匹配

换句话说,当提供了
g
时,
match
只收集最上面的匹配项,而忽略任何捕获组

例如:

> s = "Foo Bar"
"Foo Bar"
> s.match(/([A-Z])([a-z]+)/)
["Foo", "F", "oo"]
> s.match(/([A-Z])([a-z]+)/g)
["Foo", "Bar"]
没有像python
findall
那样从所有匹配项中收集所有组的内置程序,但是使用
exec
很容易编写:

function matchAll(re, str) {
    var p, r = [];
    while(p = re.exec(str))
        r.push(p);
    return r;
}
matchAll(/([A-Z])([a-z]+)/g, "Foo Bar")
结果:

[
Array[3]
0: "Foo"
1: "F"
2: "oo"
index: 0
input: "Foo Bar"
length: 3
__proto__: Array[0]
, 
Array[3]
0: "Bar"
1: "B"
2: "ar"
index: 4
input: "Foo Bar"
length: 3
__proto__: Array[0]
]

该行为在中指定。本节详细描述了带有和不带全局修饰符的正则表达式引擎所遵循的过程

特定于第11点:
如果全局为真,

使用参数“lastIndex”、e和true调用R的[[Put]]内部方法。

在中指定了行为。本节详细描述了带有和不带全局修饰符的正则表达式引擎所遵循的过程

特定于第11点:
如果全局为真,

使用参数“lastIndex”、e和true调用R的[[Put]]内部方法。

根据全局标志的存在,应该会有不同的行为。可能对于您的需求,您应该在循环中调用?根据全局标志的存在,应该有不同的行为。可能是为了满足您的需求,您应该在一个循环中调用?谢谢!这是我寻找的很大一部分。我监督了,谢谢你!这是我寻找的很大一部分。我监督了。