首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
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

回答 6

Stack Overflow用户

回答已采纳

发布于 2013-06-22 20:44:20

您可以使用try/catchRegExp构造函数:

代码语言:javascript
复制
var isValid = true;
try {
    new RegExp("the_regex_to_test_goes_here");
} catch(e) {
    isValid = false;
}

if(!isValid) alert("Invalid regular expression");
票数 97
EN

Stack Overflow用户

发布于 2013-06-22 21:02:48

下面是一个小函数,用于检查两种类型的正则表达式、字符串或模式的有效性:

代码语言:javascript
复制
function validateRegex(pattern) {
    var parts = pattern.split('/'),
        regex = pattern,
        options = "";
    if (parts.length > 1) {
        regex = parts[1];
        options = parts[2];
    }
    try {
        new RegExp(regex, options);
        return true;
    }
    catch(e) {
        return false;
    }
}

例如,用户将能够同时测试test/test/gHere是一个有效的小提琴。

票数 6
EN

Stack Overflow用户

发布于 2020-05-06 10:41:39

此函数可以将'/‘字符作为正则表达式中的普通字符来处理,也可以考虑在是普通字符串时进行转义。它将总是返回一个正则表达式,如果不是一个好的正则表达式字符串,则返回null。

代码语言:javascript
复制
function getRegex(regex) {
    try {
        regex = regex.trim();
        let parts = regex.split('/');
        if(regex[0] !== '/' || parts.length< 3){
          regex = regex.replace(/[.*+\-?^${}()|[\]\\]/g, '\\$&'); //escap common string
          return new RegExp(regex);
        }

        const option =parts[parts.length - 1];
        const lastIndex = regex.lastIndexOf('/');
        regex = regex.substring(1, lastIndex);
        return new RegExp(regex, option);
    } catch (e) {
        return null
    }
}

console.log(getRegex('ab/c'))
let htmlStartTag = getRegex('/<(?!/)(?!br)(.+?)(?<!/)>/mgs');
console.log(htmlStartTag)
let result = `</button><input id="warehouse-search-field-tablet"
class="form-control search-field"
 title="Warehouse Search Field" name="location" type="search" value="">content`.matchAll(htmlStartTag);
 console.log([...result])

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

https://stackoverflow.com/questions/17250815

复制
相关文章

相似问题

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