正则表达式,用于在事前查找后匹配多个事件

时间:2019-06-04 15:12:17

标签: javascript regex regex-lookarounds regex-group regex-greedy

我在一个文本文件中获得了以下段落:

(default) AA / BBB)
ASDF / XYZ / GE
(default) CCCC)

我想将(default)之后的所有大写字母(2-4)匹配到右括号,因此AABBBCCCC是匹配的。

这是我想出的,但与BBB不匹配:

(?<=default\)\s)[A-Z]{2,4}

那么在(default)之后要匹配一组以上的大写字母,我会丢失什么?

1 个答案:

答案 0 :(得分:2)

如果我们只希望匹配问题中的模式,则只需传递所需的情况,并使用(default)使其他情况失败:

\(default\)(.+?([A-Z]{2,4}).+?([A-Z]{2,4})|.+?([A-Z]{2,4}))

Demo 1

或:

(?=\(default\))(.+?([A-Z]{2,4}).+?([A-Z]{2,4})|.+?([A-Z]{2,4})).+

Demo 2

const regex = /\(default\)(.+?([A-Z]{2,4}).+?([A-Z]{2,4})|.+?([A-Z]{2,4}))/gm;
const str = `(default) AA / BBB)
ASDF / XYZ / GE
(default) CCCC)`;
let m;

while ((m = regex.exec(str)) !== null) {
    // This is necessary to avoid infinite loops with zero-width matches
    if (m.index === regex.lastIndex) {
        regex.lastIndex++;
    }
    
    // The result can be accessed through the `m`-variable.
    m.forEach((match, groupIndex) => {
        console.log(`Found match, group ${groupIndex}: ${match}`);
    });
}

RegEx电路

jex.im可视化正则表达式:

enter image description here