gpt4 book ai didi

Javascript 正则表达式没有按预期工作

转载 作者:行者123 更新时间:2023-11-30 13:33:49 25 4
gpt4 key购买 nike

我一直在研究一个正则表达式,它将从以下格式解析日期

3d 4m 5y

到一个数组,这样我就可以用它做一些操作。

我写了一个这样的正则表达式:

((\d+)([d,m,y]))

返回的是什么

["3d", "3d", "3", "d"]

当我相信它应该回来的时候

["3d", "3d", "3", "d","4m","4","m"]

对于字符串

3d4m

它在我的代码中是这样实现的:

c=console;
myregexp=/((\d+)([d,m,y]))/g;
//myregexp = new RegExp(regexstring);
c.log(myregexp.exec($("#dateInterval").val()));

现在我只记录数据,但我确实认为这里有问题。

最佳答案

你写道:

I believe it should be returning

["3d", "3d", "3", "d","4m","4","m"]  

这是不对的。

使用带有“g”选项的正则表达式调用 exec() 会告诉它继续处理匹配直到完成。返回数组不是所有匹配项的集合。它是所有捕获的集合,用于最终匹配尝试。在第一次迭代中,它得到 ["3d", "3d", "3", "d"]。在第 2 次迭代中,它得到 ["4m", "4m", "4", "m"]。第一次迭代中的捕获组被替换。换句话说,第 1 次迭代中第 1 次捕获中的“3d”在第 2 次迭代中被第 1 次捕获组中的 4 覆盖,依此类推。

要获取所有匹配项,您可以遍历字符串。像这样:

function test2()
{
var value = "3d4m"; // $('#element').val()
var re="(\\d+)([dmy])";
var myregexp = new RegExp(re);
while (value != "")
{
say("input: " + value);
var result = myregexp.exec(value);
if (result !== null) {
say("r[1]: " + result[0]); // 3d on 1st iteration, 4m on 2nd, etc.
value = value.substr(result[0].length);
}
}
}

关于Javascript 正则表达式没有按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5722294/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com