动态比较匹配的正则表达式模式的准确性

时间:2017-11-10 00:47:44

标签: javascript regex

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

例如,我匹配此字符串:

/path/on/file/system

我有以下两个正则表达式:

const opt1 = /\/path\/on/;
const opt2 = /\/path/;

我可以用眼睛看到opt1更严格,但javascript怎么知道呢?

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

1 个答案:

答案 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/




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