gpt4 book ai didi

需要全局匹配帮助的 JavaScript 正则表达式

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:36:23 25 4
gpt4 key购买 nike

我是 JavaScript 新手,对正则表达式有疑问。我有以下代码:

var patt3=new RegExp(/(July|August)\s+\d{1,2}(\s|,)\d{4}/g);
var str3 = "August 12,1988";
var match3 = str3.match(patt3);
document.write(match3.toString() + "<br/>");

输出为:1988 年 8 月 12 日

下面是相同的代码,但从 RegExp 末尾删除了“g”:

var patt3=new RegExp(/(July|August)\s+\d{1,2}(\s|,)\d{4}/);
var str3 = "August 12,1988";
var match3 = str3.match(patt3);
document.write(match3.toString() + "<br/>");

输出变为:August 12,1988,August,,

根据我在网上找到的定义,“g”应该匹配所有出现的模式。但我仍然对“g”对代码有什么影响感到困惑。

如有任何澄清,我将不胜感激。

提前致谢。

最佳答案

关键区别在于string.match 方法是defined如果正则表达式模式是否是全局的,则有不同的行为。

如果模式是全局的,则为包含所有匹配项的数组。在您的情况下,您只有一场比赛,但您可以通过这样的示例看到不同之处

let matches = "aaaa".match(/a(a)/g); 
console.log(matches) // returns ["aa", "aa"]

但是,如果模式不是全局模式,该方法将返回一个与找到的第一个匹配项相对应的数组。该数组在第一个位置包含完整匹配的字符串,在其他位置包含捕获。捕获是由括号分隔的正则表达式的位。同样,您可以看到该示例的不同之处:

"aaaa".match(/a(a)/g); // returns ["aa", "a"]

最后,我想指出您的代码中的一些小问题。

首先,这里不需要使用new Regexp构造函数。直接使用正则表达式即可

var patt3 = /(July|August)\s+\d{1,2}(\s|,)\d{4}/g

其次,不要盲目的“toString”东西。在您的情况下,您将该方法应用于一个数组,这就是为什么您会得到奇怪的结果。

最后,学习使用开发者工具,包括调试器和 console.log。它在表达能力和生产力方面比滥用 document.write 和 alert 要好得多。

console.write(match3)

关于需要全局匹配帮助的 JavaScript 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15035540/

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