强制执行给定的RegExp不区分大小写

时间:2015-07-17 15:51:28

标签: javascript regex

我有一个javascript函数,它接收正则表达式作为其参数之一。我想确保RegExp具有i(不区分大小写)修饰符,如果没有,则添加它。

var caseInsensitiveMatch = function (rx) {
  // TODO: verify that rx has the i modifier. Add it if it doesn't
  return rx.exec('mY tExT');
}

// both should match:
caseInsensitiveMatch(/my text/);
caseInsensitiveMatch(/my text/i);

这是一种优雅的方法吗?

2 个答案:

答案 0 :(得分:3)

如果要保留所有标志,只添加不区分大小写:

function caseInsensitiveMatch(rx, text) {
  var flags = 'i';
  if (rx.multiline) flags += 'm';
  if (rx.global) flags += 'g';
  return (new RegExp(rx.source, flags)).test(text);
}

答案 1 :(得分:2)

您可以使用regex.source属性并通过添加RegExp标志来构建新的i,以使其忽略大小写:

var caseInsensitiveMatch = function (rx) {
   var flags = rx.toString().replace(/.*\//, "").replace("i", "") + "i";
   return (new RegExp(rx.source, flags)).test('mY tExT');
}

caseInsensitiveMatch(/my text/);
//=> true
caseInsensitiveMatch(/my text/i);
//=> true
caseInsensitiveMatch(/MY TEXT/mig);
//=> true
caseInsensitiveMatch(new RegExp("MY TEXT", "mgi"));
//=> true
caseInsensitiveMatch(new RegExp("MY TEXT", "mg"));
//=> true