2012-10-22 103 views
2

可能重複:
Optimum way to compare strings in Javascript?檢查兩個字符串共享一個公共子在JavaScript

是否有任何的JavaScript快速的方式,以找出是否兩個字符串包含相同的子?例如我有這兩個字符串:「奧迪是一輛汽車」和「audiA8」。

正如您看到單詞「audi」在兩個字符串中一樣,但由於兩個字符串中的其他字符,我們無法通過簡單的indexOf或RegExp找到它。

+1

'if(string1 === string2){/ * identical * /}' - 你正在試圖問什麼,如何測試一個特定的子字符串是否在兩個不同的字符串中,或​​者是否存在一些出現的子字符串在兩個不同的字符串中,或​​...?您能否請示例_input_和所需的_output_? – nnnnnn

+0

你爲什麼需要indexOf或RegExp?只需比較2與'==='。 – AMember

+0

如果兩個字符串是'abc'和'cde',他們是否應該被認爲是「相同的」,因爲'c'? – duri

回答

1

看看類似的文字功能實現here。它返回兩個字符串中匹配字符的數量。

對於您的例子那就是:

similar_text("audi is a car", "audiA8") // -> 4 

這意味着字符串有4個字元公共子。

+0

謝謝你,確切的我需要什麼。 – nicmon

4

不知道有任何簡單的方法,但這應該工作:

if(a.indexOf(substring) != -1 && b.indexOf(substring) != -1) { ... } 

其中ab是你的字符串。

0
var a = "audi is a car"; 
var b = "audiA8"; 

var chunks = a.split(" "); 
var commonsFound = 0; 

for (var i = 0; i < chunks.length; i++) { 
    if(b.indexOf(chunks[i]) != -1) commonsFound++; 
} 

alert(commonsFound + " common substrings found."); 
3

在Bioinformatics中做這種事的標準工具是BLAST程序。它用於比較兩個分子片段(如DNA或蛋白質),以找出它們彼此對齊的位置 - 基本上兩個字符串(有時是多GB)共享相同的子字符串。

基本的算法很簡單,只是系統地將其中一個字符串分解成幾部分並將其與另一個字符串進行比較。簡單的執行是這樣的:

// Note: not fully tested, there may be bugs: 

function subCompare (needle, haystack, min_substring_length) { 

    // Min substring length is optional, if not given or is 0 default to 1: 
    min_substring_length = min_substring_length || 1; 

    // Search possible substrings from largest to smallest: 
    for (var i=needle.length; i>=min_substring_length; i--) { 
     for (j=0; j <= (needle.length - i); j++) { 
      var substring = needle.substr(j,i); 
      var k = haystack.indexOf(substring); 
      if (k != -1) { 
       return { 
        found : 1, 
        substring : substring, 
        needleIndex : j, 
        haystackIndex : k 
       } 
      } 
     } 
    } 
    return { 
     found : 0 
    } 
} 

您可以修改這個算法做更看中的搜索像忽略的情況下,模糊匹配的字符串,查找多個子等,這僅僅是基本的想法。

+0

非常好的功能。如果你不介意,我會[偷](https://github.com/psychowood/ng-torrent-ui/commit/9046410c51859c2964b0d305d3903c1954ec88ef)它。 :) – psychowood

相關問題