首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何检查输入的字符串是否为有效的正则表达式?

如何检查输入的字符串是否为有效的正则表达式?
EN

Stack Overflow用户
提问于 2013-06-22 20:39:40
回答 6查看 41.9K关注 0票数 73

在JavaScript中,如何检查一个字符串是否是要编译的正确正则表达式?

例如,当您执行以下javascript时,它会产生一个错误。

代码语言:javascript
复制
var regex = new RegExp('abc ([a-z]+) ([a-z]+))');
// produces:
// Uncaught SyntaxError: Invalid regular expression: /abc ([a-z]+) ([a-z]+))/: Unmatched ')'

如何确定一个字符串是否为有效的正则表达式?

EN

Stack Overflow用户

发布于 2021-03-24 03:12:04

这里的答案都不能满足我检查字符串是否为其他语言(主要是php)的有效正则表达式的需要,因为它们要么忽略标志、分隔符,要么忽略转义的特殊字符,所以我编写了自己的函数

代码语言:javascript
复制
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对象

代码语言:javascript
复制
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')
}

票数 0
EN
查看全部 6 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17250815

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档