"ange134".match(/\d+/) // result => 134
"ange134".match(/\d*/) // result => "" //expected 134
在上述情况下,+
表现得很好,因为贪婪。
但为什么/\d*/
没有返回相同的东西?
答案 0 :(得分:6)
"ange134".match(/\d+/) // result => 123
在上面的情况下\d+
确保必须至少有一个数字可以跟随更多,因此当扫描开始并且它在开头找到“a”时它仍然继续搜索数字不符合条件。
"ange134".match(/\d*/) // result => "" //expected 123
但在上述情况下,\d*
表示零或更多数字出现。因此,当扫描开始并且当它找到“a”时,条件得到满足(数字为零)...因此,您将获得空结果集。
您可以设置全局标记/g
以使其继续搜索所有结果。请参阅此link以了解行为如何随全局标志发生变化。尝试打开和关闭它以更好地理解它。
console.log("ange134".match(/\d*/));
console.log("ange134".match(/\d*$/));
console.log("ange134".match(/\d*/g));
console.log("134ange".match(/\d*/)); // this will return 134 as that is the first match that it gets
答案 1 :(得分:0)
"ange134".match(/\d*/);
表示“匹配数字字符0次或更多次”。正如Ryan在上面指出的那样,空字符串满足这个正则表达式。尝试:
"ange134".match(/\d*$/);
你可以看到它确实有效 - 如果您的目标是匹配该字符串的 134
部分,则需要一些上下文。
答案 2 :(得分:0)
"ange134".match(/\d*/) //means 0 or more times, and this match in the first
//letter (because it "returns false") because you aren't using global flag that search in the whole string
如果你想让它工作,那么使用全局标志:
"ange134".match(/\d*/g)
或使用没有标志的第一个正确选项:
"ange134".match(/\d+/)
在这个链接中有一个解释为什么它匹配第一个" a"信:https://regex101.com/r/3ItllY/1/