我有一个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);
这是一种优雅的方法吗?
答案 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