在JavaScript中,如何检查一个字符串是否是要编译的正确正则表达式?
例如,当您执行以下javascript时,它会产生一个错误。
var regex = new RegExp('abc ([a-z]+) ([a-z]+))');
// produces:
// Uncaught SyntaxError: Invalid regular expression: /abc ([a-z]+) ([a-z]+))/: Unmatched ')'如何确定一个字符串是否为有效的正则表达式?
发布于 2013-06-22 20:44:20
您可以使用try/catch和RegExp构造函数:
var isValid = true;
try {
new RegExp("the_regex_to_test_goes_here");
} catch(e) {
isValid = false;
}
if(!isValid) alert("Invalid regular expression");发布于 2013-06-22 21:02:48
下面是一个小函数,用于检查两种类型的正则表达式、字符串或模式的有效性:
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/g。Here是一个有效的小提琴。
发布于 2020-05-06 10:41:39
此函数可以将'/‘字符作为正则表达式中的普通字符来处理,也可以考虑在是普通字符串时进行转义。它将总是返回一个正则表达式,如果不是一个好的正则表达式字符串,则返回null。
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])
https://stackoverflow.com/questions/17250815
复制相似问题