为什么在Javascript中使用字符串替换时需要添加/ g?

Tes*_*act 34 javascript

为什么在JavaScript中使用字符串替换时需要'/ g'?

例如 var myString = myString.replace(/%0D%0A/g,"<br />");

Eif*_*ion 47

它不是必需的,但默认情况下string.replace,JavaScript只会替换它找到的第一个匹配值.添加/g意味着将替换所有匹配值.


cod*_*joe 35

您在正则表达式结尾处谈论的" g "称为"修饰符"." g "代表" 全局修饰符 ".这意味着您的替换将使用您提供的替换字符串替换匹配字符串的所有副本.

有用的修饰符列表:

  1. g - 全球替换.替换提供的文本中匹配字符串的所有实例.
  2. i - 不区分大小写的替换.替换匹配字符串的所有实例,忽略大小写的差异.
  3. m - 多行替换.应针对多行匹配测试正则表达式.

您可以将修饰符(例如g和i)组合在一起,以获得全局不区分大小写的搜索.

例子:

//Replace the first lowercase t we find with X
'This is sparta!'.replace(/t/,'X');
//result: 'This is sparXa!'

//Replace the first letter t (upper or lower) with X
'This is sparta!'.replace(/t/i, 'X');
//result: 'Xhis is sparta!'

//Replace all the Ts in the text (upper or lower) with X
'This is sparta!'.replace(/t/gi, 'X' );
//result: 'Xhis is sparXa!'
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅w3schools上的JavaScript RegExp对象参考.


小智 7

'g'标志表示"全局",因此每次出现的%0D%0A都将被替换.否则它将仅替换FIRST事件.

  • 我不知道'贪婪'的'g'经常被使用,但我以前从未见过它.就正则表达式而言,我只看到'g'作为一个称为'全局'的修饰符."贪婪"这个术语我只看到并用于贪婪匹配w/*和+运算符.贪婪匹配意味着正则表达式中的单个术语(例如.*)将匹配它可以的任何东西,直到它不再存在(例如表达式'贪婪匹配') (2认同)

And*_*ore 6

g正则表达式修饰符(称为全球改性剂)基本上是说在发动机不停止解析后的首场比赛中的字符串.如果要省略修饰符,则只%0D%0A替换第一个实例(在某些情况下可能需要).