测试字符串:
first.second.third.last
匹配结果:
first
second
third
fourth
我只能使用模式first.second
来匹配.*(?=\.)|(?<=\.).*
。
当我在控制台"licence.name".match(/(.*(?=\.))|(?<=\.).*/)
中使用此命令时,它会在regex101.com上返回具有许可证的数组,其结果与生成的结果不同:
比赛1 licence
比赛2 ''
匹配3 name
为什么JavaScript和regex101.com的匹配结果不同?
我想要的是在JavaScript match()
函数中返回所需的匹配数组。
答案 0 :(得分:-1)
您必须将修饰符g
添加到正则表达式中,以检索所有结果,而不仅是第一个匹配项。
在regex101.com的第一张图片上,您可以看到该服务将gm
作为修饰符应用于正则表达式。但是m
仅在您有多行字符串并且要匹配其他行的结果时才是必需的。
"licence.name".match(/(.*(?=\.))|(?<=\.).*/g);
//["licence", "", "name"]
看看String.prototype.match的msdn文章:
如果正则表达式不包含g标志,则为str.match() 将返回与RegExp.exec()相同的结果。返回的数组有 一个额外的输入属性,其中包含原始字符串 解析。此外,它还有一个index属性,代表 字符串中匹配项的从零开始的索引。
如果正则表达式包含g标志,则该方法返回一个 包含所有匹配的子字符串而不是匹配对象的数组。 捕获的组不返回。如果没有匹配项,则该方法 返回null。