假设我有两个正则表达式并且都匹配一个字符串,但其中一个以更严格的方式匹配它,有没有办法以编程方式解决这个问题?
例如,我匹配此字符串:
/path/on/file/system
我有以下两个正则表达式:
const opt1 = /\/path\/on/;
const opt2 = /\/path/;
我可以用眼睛看到opt1
更严格,但javascript怎么知道呢?
将正则表达式转换为字符串并检查字符长度是否严格?
答案 0 :(得分:0)
您可以通过以下方式实现此功能:
按长度排序正则表达式。
循环遍历已排序的正则表达式数组以检查是否存在匹配
然后返回最严格的匹配元素。
function check(arrayOfRegEx, str) {
//sort the regex array by length
var sortedArr = arrayOfRegEx.sort(function(a, b) {
return a.toString().length - b.toString().length || a.toString().localeCompare(b);
});
let mostStrict = '';
sortedArr.forEach(function(reg) {
if(new RegExp((reg.toString()).replace(/\\/g, "").substring(1)).test(str)) {
mostStrict = reg;
}
});
return mostStrict;
}
var result = check([/\/path/, /\/test\/test/, /\/path\/on/], '/path/on/file/system');
console.log(result); // returns /\/path\/on/

当然,您可以调整此功能以满足您的需求