在JavaScript中,如何检查一个字符串是否是要编译的正确正则表达式?
例如,当您执行以下javascript时,它会产生一个错误。
var regex = new RegExp('abc ([a-z]+) ([a-z]+))');
// produces:
// Uncaught SyntaxError: Invalid regular expression: /abc ([a-z]+) ([a-z]+))/: Unmatched ')'如何确定一个字符串是否为有效的正则表达式?
发布于 2021-03-24 03:12:04
这里的答案都不能满足我检查字符串是否为其他语言(主要是php)的有效正则表达式的需要,因为它们要么忽略标志、分隔符,要么忽略转义的特殊字符,所以我编写了自己的函数
function isValidRegex(s) {
try {
const m = s.match(/^([/~@;%#'])(.*?)\1([gimsuy]*)$/);
return m ? !!new RegExp(m[2],m[3])
: false;
} catch (e) {
return false
}
}
console.log(isValidRegex('abc')) //False
console.log(isValidRegex('/abc/')) //True
console.log(isValidRegex('/ab#\/[c]/ig')) //True
console.log(isValidRegex('@ab#\/[c]@ig')) //Special delimiters: True
console.log(isValidRegex('/ab\/[c/ig')) //False
console.log(isValidRegex('/abc/gig')) //False
还可以派生此函数将字符串转换为RegExp对象
function stringToRegex(s) {
const m = s.match(/^([/~@;%#'])(.*?)\1([gimsuy]*)$/);
return m ? new RegExp(m[2], m[3]) : new RegExp(s);
}
console.log(stringToRegex('abc'))
console.log(stringToRegex('/abc/'))
console.log(stringToRegex('/ab#\/[c]/ig'))
console.log(stringToRegex('@ab#\/[c]@ig'))
try {
console.log(stringToRegex('/ab#\/[c/ig'))
} catch (e) {
console.log('Not a valid regex')
}
https://stackoverflow.com/questions/17250815
复制相似问题