Javascript 动态比较正则表达式模式的匹配精度

Javascript 动态比较正则表达式模式的匹配精度,javascript,regex,Javascript,Regex,假设我有两个正则表达式,它们都匹配一个字符串,但其中一个以更严格的方式匹配它,有没有办法通过编程来解决这个问题 例如,我匹配以下字符串: /path/on/file/system 我有以下两个正则表达式: const opt1 = /\/path\/on/; const opt2 = /\/path/; 我可以用我的眼睛看到,opt1更严格,但是javascript怎么知道这一点呢 将正则表达式转换为字符串并检查字符长度是否是严格程度的良好度量?您可以通过以下方式实现此功能: 按长度对正则表

假设我有两个正则表达式,它们都匹配一个字符串,但其中一个以更严格的方式匹配它,有没有办法通过编程来解决这个问题

例如,我匹配以下字符串:

/path/on/file/system
我有以下两个正则表达式:

const opt1 = /\/path\/on/;
const opt2 = /\/path/;
我可以用我的眼睛看到,
opt1
更严格,但是javascript怎么知道这一点呢


将正则表达式转换为字符串并检查字符长度是否是严格程度的良好度量?

您可以通过以下方式实现此功能:

按长度对正则表达式进行排序

循环遍历已排序的正则表达式数组以检查是否存在匹配项

然后返回最严格的匹配元素

功能检查(arrayOfRegEx,str){
//按长度对正则表达式数组排序
var sortedar=arrayOfRegEx.sort(函数(a,b){
返回a.toString().length-b.toString().length | | a.toString().localeCompare(b);
});
让mostStrict='';
分拣机forEach(功能(reg){
if(new RegExp((reg.toString()).replace(/\\\/g,”).substring(1)).test(str)){
mostStrict=reg;
}
});
返回最短路径;
}
var result=check([/\/path/,/\/test\/test/,/\/path\/on/],'/path/on/file/system');

console.log(结果);//返回/\/path\/on/
您可以通过以下方式实现此功能:

按长度对正则表达式进行排序

循环遍历已排序的正则表达式数组以检查是否存在匹配项

然后返回最严格的匹配元素

功能检查(arrayOfRegEx,str){
//按长度对正则表达式数组排序
var sortedar=arrayOfRegEx.sort(函数(a,b){
返回a.toString().length-b.toString().length | | a.toString().localeCompare(b);
});
让mostStrict='';
分拣机forEach(功能(reg){
if(new RegExp((reg.toString()).replace(/\\\/g,”).substring(1)).test(str)){
mostStrict=reg;
}
});
返回最短路径;
}
var result=check([/\/path/,/\/test\/test/,/\/path\/on/],'/path/on/file/system');

console.log(结果);//返回/\/path\/on/
它不是“更严格”。它在字符串中匹配
/on/
,而第一个不是,唯一的区别是
opt1
更具体地匹配
/path/on/
,其中as
opt2
将匹配任何包含
/path/
@NewToJS的内容是的,这就是我的意思。你知道答案吗?我不确定你所说的“javascript如何知道”是什么意思,因为如果找到的匹配项不是可以匹配的百分比,它会返回true或false。也许你正在寻找一个比较来返回一个匹配的百分比?
但是javascript怎么知道呢?
没有,你一次只使用一个RegExp,两者都会匹配,javascript不在乎,你在乎。对于这一点肯定没有简单的通用解决方案,甚至对于regex中的“严格性”有一个明确的定义。我想您可以将其定义为“可能匹配的总数”,但当涉及通配符和字符集时,这就很难测量,而且正则表达式模式具有无限潜在匹配的情况并不少见。也许一个足够好的方法是计算模式中的文字字符数,这并不“严格”。它在字符串中匹配
/on/
,而第一个不是,唯一的区别是
opt1
更具体地匹配
/path/on/
,其中as
opt2
将匹配任何包含
/path/
@NewToJS的内容是的,这就是我的意思。你知道答案吗?我不确定你所说的“javascript如何知道”是什么意思,因为如果找到的匹配项不是可以匹配的百分比,它会返回true或false。也许你正在寻找一个比较来返回一个匹配的百分比?
但是javascript怎么知道呢?
没有,你一次只使用一个RegExp,两者都会匹配,javascript不在乎,你在乎。对于这一点肯定没有简单的通用解决方案,甚至对于regex中的“严格性”有一个明确的定义。我想您可以将其定义为“可能匹配的总数”,但当涉及通配符和字符集时,这就很难测量,而且正则表达式模式具有无限潜在匹配的情况并不少见。也许一个足够好的方法是计算模式中的文字字符数。