对JavaScript Regex多行模式感到困惑

Confused about JavaScript Regex Multiline mode

本文关键字:模式 JavaScript Regex      更新时间:2023-09-26

对于Javascript来说还是很新鲜的,我很难使用多行regex。

正则表达式的边界通常为^(表示行的开始)和$(表示当前行的结束)。因此,我的正则表达式受到约束,只能在^$之间运行。

现在在多行模式下,如何设置边界?我看了几个例子,它只是在躲避我

如果我的提要看起来像这个

Joe's item list 
Item one is Abc
Item two is xyz 
Item three is 123
End of Item List 

我的典型正则表达式看起来像^Item ('w+) is ('w+)$

但我希望我的正则表达式只在开始行和结束行之间激发,并希望了解这是Joe的项目列表。我是不是只是在考虑这个问题,认为我应该使用多行regex?

您可以在带有m修饰符的javascript中使用多行模式。全局g修饰符表示它将返回一个包含所有匹配项的数组:
JSFiddle

/^Item ('w+) is ('w+)$/gm

我不知道你是如何使用正则表达式的,也不知道你认为使用多行正则表达式可能有问题是什么意思。。。但这可以在没有多行模式的情况下用这样的东西来模仿:
JSFiddle

/(?:^|'n)Item ('w+) is ('w+)(?='n|$)/g

如果你想退出捕获组,你可以这样做:
JSFiddle

var matches = []
var regex = /^Item ('w+) is ('w+)$/gm;
var match = null;
while (match = regex.exec(str)) {
    matches.push({
        itemNumber: match[1],
        itemName: match[2]
    });
}