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

Javascript 强制给定的RegExp不区分大小写,javascript,regex,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: caseInsensitiveMat

我有一个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);

这样做的优雅方式是什么?

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

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

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

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

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

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);
}

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

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);
}

请注意,如果您关心的话,这将删除任何其他标志。请注意,如果您关心的话,这将删除任何其他标志。谢谢,我不熟悉RegExp的源属性。谢谢,我不熟悉RegExp的源属性。