【问题标题】:RegEx js: how to correctly reuse patterns using capture groups? [duplicate]RegEx js:如何使用捕获组正确重用模式? [复制]
【发布时间】:2021-07-16 19:16:24
【问题描述】:
let string="James 18 Jenny 38 ";
let regEx=/(\w+\s\d+\s)\1/;
let result=string.match(regEx);

console.log(result)

我试图了解如何在捕获组中重复使用模式,但控制台返回 null:

有人能解释一下为什么用这种方法它不起作用吗? 如果我复制如下,它会以我想象的方式返回,因此我可能会错过一些关于语法的内容,但我不明白是什么。

let string="James 18 Jenny 38 ";
let regEx=/(\w+\s\d+\s)(\w+\s\d+\s)/;
let result=string.match(regEx);

console.log(result)

【问题讨论】:

标签: javascript regex capture-group


【解决方案1】:

\1 不重用模式,它会寻找另一个匹配模式的实例。在您的示例中,它正在寻找另一个 James 18 并没有找到它。

您可以使用{2} 量词来查找两个相邻的模式匹配,但随后捕获组将只包含其中一个或两者都包含(取决于您应用量词的位置和方式)。例如,这里有两个:

let string = "James 18 Jenny 38 ";
let regEx = /((?:\w+\s\d+\s){2})/;
let result = string.match(regEx);

console.log(result[1]);

或者在循环中只使用该模式的一个实例:

let string = "James 18 Jenny 38 ";
let regEx = /(\w+\s\d+\s)/g;
let result;

while ((result = regEx.exec(string)) !== null) {
    console.log(result[1]);
}

【讨论】:

    猜你喜欢
    • 2017-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-21
    • 2014-01-31
    • 1970-01-01
    相关资源
    最近更新 更多