JS正则表达式不返回所有匹配的组
JS regex not returning all matched group
我的字符串如下:
var data = "Validation failed: Attachments document 01april2015_-_Copy.csv has contents that are not what they are reported to be, Attachments document 01april2015.csv has contents that are not what they are reported to be"
我的正则表达式:
var regex = /Validation failed:(?:(?:,)* Attachments document ([^,]*) has contents that are not what they are reported to be)+/;
结果:data.match(regex)
["验证失败:附件文档01april2015_-_Copy.csv的内容与报告的内容不一致,附件文档01april2015.csv的内容与报告的内容不一致","01april2015.csv"]
data.match(regex).length == 2
真正
预期结果:
data.match(regex)
["验证失败:附件文档01april2015_-Copy.csv的内容与报告的内容不一致,附件文档01april2015.csv的内容与报告的内容不一致","01april2015- _copy .csv", "01april2015.csv"]
data.match(regex).length == 3
真正
我无法理解为什么匹配后不返回第一个文件名(01april2015_-_Copy.csv
)。
在JS中,没有Captures
集合在c#中,因此,我建议使用g
选项缩短正则表达式,并使用exec
,以便不丢失捕获的文本:
var re = /Attachments document ([^,]*) has contents that are not what they are reported to be/g;
var str = 'Validation failed: Attachments document 01april2015_-_Copy.csv has contents that are not what they are reported to be, Attachments document 01april2015.csv has contents that are not what they are reported to be';
var m;
var arr = [str];
while ((m = re.exec(str)) !== null) {
if (m.index === re.lastIndex) {
re.lastIndex++;
}
arr.push(m[1]);
}
console.log(arr);
请注意,可以使用匹配所需子字符串的最短可能模式来查找多个匹配。我们不能使用String#match
,因为:
如果正则表达式包含
g
标志,该方法返回一个包含所有匹配子字符串而不是匹配对象的Array。不返回捕获的组如果您想获得捕获组,并且设置了全局标志,则需要使用
RegExp.exec()
。
用/g
:
RegExp#exec
的行为如果您的正则表达式使用
"g"
标志,您可以多次使用exec()
方法来查找同一字符串中的连续匹配。如果匹配成功,
exec()
方法返回一个数组并更新正则表达式对象的属性。返回的数组将匹配的文本作为第一项,然后为每个匹配的包含被捕获的文本的捕获括号提供一项。
相关文章:
- 如何匹配多个值使用正则表达式返回单个值
- 使用正则表达式返回部分字符串
- 为什么这个正则表达式返回前面的字符
- JavaScript 正则表达式返回拆分的结果
- Javascript从某些元素中提取日期与匹配和正则表达式返回空数组
- 如果关联数组从正则表达式返回,则对索引进行排序
- 正则表达式返回一些尴尬的值
- 正则表达式返回未捕获的组,而不是捕获的组
- Javascript 正则表达式返回空格之间的文本
- 正则表达式返回 javascript 变量
- 正则表达式返回未定义的字符串
- 正则表达式返回带有下划线组的未定义
- 正则表达式返回值,即使它不匹配
- Javascript:用于解析包含转义引号的带引号字符串的正则表达式-返回未终止的字符类
- 相同的正则表达式返回不同的结果
- 在Node.JS中从Javascript正则表达式返回NULL
- jQuery正则表达式返回意外结果
- 韩文和字母正则表达式返回false
- .match()对于密码的正则表达式返回null
- JavaScript正则表达式返回-1当>0是预期值