正则表达式匹配两个点之间的所有内容,包括最后一个单词和第一个单词(不包括点),JavaScript .match()

时间:2018-11-14 11:59:47

标签: javascript regex

测试字符串:

first.second.third.last

匹配结果:

first
second
third
fourth

我只能使用模式first.second来匹配.*(?=\.)|(?<=\.).*

当我在控制台"licence.name".match(/(.*(?=\.))|(?<=\.).*/)中使用此命令时,它会在regex101.com上返回具有许可证的数组,其结果与生成的结果不同:

比赛1 licence

比赛2 ''

匹配3 name

regex101 match

console match

为什么JavaScript和regex101.com的匹配结果不同?

我想要的是在JavaScript match()函数中返回所需的匹配数组。

1 个答案:

答案 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。