是否可以修改现有RegExp上的标志?

时间:2015-05-07 11:56:22

标签: javascript regex

我的代码收到一个RegExp对象(不受控制)。它不是全球性的,但我需要它。

目前我正在这样做:

if (!regex.global) {
  var flags = 'g';
  if (regex.ignoreCase) flags += 'i';
  if (regex.multiline ) flags += 'm';
  if (regex.sticky    ) flags += 'y';
  regex = new RegExp(regex.source, flags);
}

...因为我无法想出任何其他方式。

  • regex.global没有二传手。
  • regex.compile(new_pattern)已弃用,以支持new RegExp(new_pattern)
  • regex.flags不是一件事

有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

我害怕答案是"不"。

无法更改现有正则表达式上的标志。你正在做的事情似乎是最干净的方式。

你(可以说)可以稍微缩短可选标志:

var flags = 'g' +
    (regex.ignoreCase ? 'i' : '') +
    (regex.multiline ? 'm' : '') +
    (regex.sticky ? 'y' : '');