[英]global Regexp is returning incorrect index inside for loop
我正在尝试从字符串中删除时间戳(格式为数字破折号)。 在这个过程中,我尝试了全局 RegExp。 我想出了以下代码:
for(let filename of ["123-123_aaa_bbb_ccc","aaa_bbb_ccc_129-999"])
{
let s=filename.split("_")
let globalRegex = new RegExp('^\d+\-\d+$', 'g');
for(let si of s){
if(globalRegex.test(si)) break
}
console.log(`match found at: `,globalRegex.lastIndex)
}
返回:
match found at: 0
match found at: 0
我的问题是:
这里有很多问题:
0
是因为您的正则表达式不匹配,并且它不匹配是因为您在常规字符串文字中定义了正则表达式字符串,因此丢失了所有单个反斜杠。 模式必须使用正则表达式文字设置, let globalRegex = /^\d+\-\d+$/;
(请参阅为什么这个 javascript 正则表达式不起作用? )。 请注意没有g
标志,如果将其与RegExp#test()
一起使用,则不得使用g
标志以避免出现问题(请参阅为什么带有全局标志的 RegExp 会给出错误的结果? )。0
作为输出,因为/^\d+\-\d+$/
正则表达式可以并且只会在字符串的开头匹配(索引=0)。 您似乎想要获取字符串中“单词”或“令牌”的 ID,因此您需要对它们进行计数。因此,您可以将代码重写为
for(let filename of ["123-123_aaa_bbb_ccc","aaa_bbb_ccc_129-999"]) { let result = -1; let s=filename.split("_") let globalRegex = /^\d+\-\d+$/; for (const [index, si] of s.entries()) { if(globalRegex.test(si)) { result = index break } } console.log(`match found at: `, result) }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.