JavaScript RegExp 忽略案例标志与全局匹配标志

JavaScript RegExp ignore case flag vs global match flag

本文关键字:标志 全局 案例 RegExp JavaScript      更新时间:2023-09-26

这是标志忽略情况的代码示例。预计我只会收到一场比赛。

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

结果

a = [桑普] [上午] [p]

我应该有一个 = [桑普]

如果您将 i 标志更改为 g

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

令人惊讶(至少对我来说)结果只有一个元素

a = [桑普]

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

我只是要介绍.match的行为方式:

  • 如果没有g -flag .match将返回一个完全匹配的数组以及所有捕获组或null(如果没有匹配)。

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

a = str.match(/S(am)(p)/i);

返回第一个匹配的字符串,$1 $2

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

返回匹配数组(此处只有一个)

如果你的字符串像那样贴花

var str = "Sample text Sample text";

/g 返回 Samp Samp,当您的正则表达式看起来像/S(.m)(p)/g而字符串看起来像"Sample text Simple text";时,它很有用