簡體   English   中英

如何比較兩個字符串並獲得不同的部分

[英]How to compare two Strings and get Different part

現在我有兩個琴弦

var str1 = "A10B1C101D11";
var str2 = "A1B22C101D110E1";

我打算做的是告訴他們之間的區別,結果看起來像

A10B1C101D11

A10 B22 C101 D110E1

它遵循相同的模式,一個字符和一個數字。 如果字符不存在或它們之間的數目不同,我會說它們是不同的,並突出顯示不同的部分。 正則表達式可以做到嗎或其他任何好的解決方案? 提前致謝!

讓我先說說regexp可能不是最好的工具。 由於您知道字符串具有簡單的格式,因此將字符串解析為標記然后比較標記將更快,更安全。

但是,您可以使用Regexp進行此操作,盡管在javascript中,由於缺乏后向功能而受到阻礙。

執行此操作的方法是使用否定超前行為來防止其他字符串中包含的匹配項。 但是,由於javascript不支持向后搜索,因此您可能需要從兩個方向進行搜索。

我們通過將字符串與可以測試的定界符進行連接來實現。

如果使用“ |” 作為分隔符,正則表達式變為;

/(\D\d*)(?=(?:\||\D.*\|))(?!.*\|(.*\d)?\1(\D|$))/g

要找到第二個字符串中第一個中不存在的標記,您可以執行以下操作:

var bothstring=str2.concat("|",str1);
var re=/(\D\d*)(?=(?:\||\D.*\|))(?!.*\|(.*\d)?\1(\D|$))/g;
var match=re.exec(bothstring);

隨后對re.exec的調用將返回以后的匹配。 因此,可以像下面的示例中那樣遍歷它們。

while (match!=null){
    alert("\""+match+"\" At position "+match.index);
    match=re.exec(t);
}

如前所述,這在str2中給出了與str1中不同的令牌。 要獲得str1中不同的標記,請使用相同的代碼,但是在連接字符串時更改str1和str2的順序。

如果處理潛在的臟輸入,以上代碼可能並不安全。 特別是,如果輸入“ A100 | A100”之類的字符串,可能會出現異常,因為正則表達式不會知道源應該是兩個不同的字符串,因此第一個A100將不被視為缺少對象。 如果這是一個潛在的問題,則搜索是否出現定界字符。

您調用將字符串拆分為數組

var aStr1 = str1.split('');
var aStr2 = str2.split('');

然后檢查哪一個字符更多,並保存較小的數字

var totalCharacters;
if(aStr1.length > aStr2.length) {
    totalCharacters = aStr2.length
} else {
    totalCharacters = aStr1.length
}

然后循環比較兩者

var diff = [];
for(var i = 0; i<totalCharacters; i++) {
   if(aStr1[i] != aStr2[i]) {
      diff.push(aStr1[i]); // or something else
   }
}

在最后,您可以從較大的String中連接最后的字符(因為它們顯然與另一個字符不同)。

有幫助嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM