JavaScript RegExp忽略大小写标志与全局匹配标志

JavaScript RegExp忽略大小写标志与全局匹配标志,javascript,regex,Javascript,Regex,下面是标志忽略案例的代码示例。我只希望得到一场比赛 var str = "Sample text"; var a = new Array(); a = str.match(/S(am)(p)/i); 结果 a=[Samp][am][p] 我应该有一个=[Samp] 如果你用g改变i标志 var str = "Sample text"; var a = new Array(); a = str.match(/S(am)(p)/g); 令人惊讶的是(至少对我来说)结果只有一个要素 a=[Samp

下面是标志忽略案例的代码示例。我只希望得到一场比赛

var str = "Sample text";
var a = new Array();
a = str.match(/S(am)(p)/i);
结果

a=[Samp][am][p]

我应该有一个=[Samp]

如果你用g改变i标志

var str = "Sample text";
var a = new Array();
a = str.match(/S(am)(p)/g);
令人惊讶的是(至少对我来说)结果只有一个要素

a=[Samp]

a = str.match(/S(am)(p)/i);
返回第一个匹配的字符串,$1$2

a=str.match(/S(am)(p)/g)

返回匹配的数组(此处仅一个)

如果你的绳子是那样贴花的

var str = "Sample text Sample text";

/g return Samp Samp,当您的regexp看起来像
/S(.m)(p)/g
并且字符串看起来像
“Sample text Simple text”时,它很有用

javascript正则表达式API非常不直观,因为它根据
g
-标志执行各种魔法

我将介绍
.match
的行为:

  • 不带
    g
    -flag
    .match
    返回完全匹配加上所有捕获组的数组,如果不匹配,则返回
    null

  • 使用
    g
    -flag
    .match
    返回一个包含所有完整匹配项的数组,捕获组不会产生任何影响<如果没有匹配项,则代码>null


i
表示不区分大小写的匹配。其他匹配由捕获组捕获
()
match()
函数如果没有
g
标志,则最多只返回1个匹配,从索引1捕获的文本。我认为您需要重新阅读文档。关于重复的可能重复:询问者似乎对匹配组的工作方式有误解,但这两个问题处理的是
match()的相同行为