为什么正则表达式不匹配字符串末尾的所有数字而不是数字?

时间:2016-04-14 18:04:30

标签: javascript regex

我只是在寻找能够观察给定字符串中最后一个数字(\ d或[0-9])的正则表达式,字符串如下:

var str = "7-Dec-1985"
var str = "#scrollto-section-4"

当然,我在SO HERE

的以下帖子中找到了答案

我正在使用如下的正则表达式:

str.match(/\d+$/)

工作正常,没有问题,现在我使用以下工具分析正则表达式 HERE

\d+ //matches  greedy 0 to as many 
$ - specifies that the search should start at the end of the string

但为什么上面的例子中的正则表达式如下:

var str = "7-Dec-1985"

仅匹配1985为什么不71985

3 个答案:

答案 0 :(得分:2)

因为$表示“输入结束”(或“如果指定m标志,则为”行尾或输入结束“),而\d+表示连续一系列数字(不是与其他东西混合的数字)。所以\d+$意味着“在结束之前连续的一系列数字。”

如果您想在任何地方进行匹配,请移除$。此外,如果您想多次匹配,则需要一个g(“全局”)标记。

示例 - 原作:

var str = "7-Dec-1985";
document.body.innerHTML = JSON.stringify(str.match(/\d+$/));

没有$,但没有g

var str = "7-Dec-1985";
document.body.innerHTML = JSON.stringify(str.match(/\d+/));

没有$g

var str = "7-Dec-1985";
document.body.innerHTML = JSON.stringify(str.match(/\d+/g));

答案 1 :(得分:2)

抱歉,$并不意味着在字符串末尾开始搜索。

您的正则表达式\d+$表示匹配字符串末尾的数字

要匹配任何数字,请使用\d+ like this

答案 2 :(得分:2)

因为-Dec-7之间的1985不是数字。此外$表示行尾。因此,您的模式只匹配字符串(连续)的结尾数字。