Javascript 强制给定的RegExp不区分大小写
我有一个javascript函数,它接收一个正则表达式作为参数之一。我想确保RegExp有I(不区分大小写)修饰符,如果没有,就添加它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
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的源属性。