2015-05-31 26 views
1
得到的字符串类似的文本

是否有可能使功能通过正则表达式前得到的字符串类似的文本:是否有可能通过正则表达式

最大差异字母= 2个或3个字母(+或 - )将被罚款

var text = 'Is it possible to get similar text in string by RegExp'; 
// and 
similar_text(text , 'strong'); // => string 
similar_text(text , 'posible'); // => possible 
similar_text(text , 'isit'); // => Is it 
// etc... 
+2

你如何定义类似的文字? – Surely

+0

如果最大差异字母= 2或3个字母(+或 - )将罚款 –

+0

我认为RegExp本身只能用于检查文本是否都符合某种模式。但为了检测两个字符串最多只能有2或3个字母,您应该编写一个自定义函数来处理它。我做一些搜索并找到这一个,你可以看看。 http://www.daftlogic.com/sandbox-javascript-compare-differences-between-strings.htm – Surely

回答

4

这是我的实现(需要Levenshtein函数)。不是最漂亮的,但它能够完成任务:

function similar_text(haystack, needle) { 
    var best_match = false; 
    var best_match_int = 9007199254740992; 

    var arr = haystack.split(" "); 

    for (var chunk = 1; chunk < arr.length; chunk++) { 
     for (var i = 0; i<arr.length; i++) { 
     if (i+chunk > arr.length) 
      continue; 

     var subStack = arr.slice(i, i+chunk).join(' '); 
     var l = new Levenshtein(needle.toLowerCase(), subStack.toLowerCase()); 

     if (l.distance < best_match_int) 
     { 
      best_match = subStack; 
      best_match_int = l.distance; 
     } 
     } 
    } 


    return best_match; 
    } 

这里是一个Plunker demoing如何可以做到这一点。

+0

谢谢你是完美的:) –