簡體   English   中英

是否需要有關如何在javascript中比較一個字符串和從另一個字符串中刪除一個字符串的建議?

[英]Need advice on how to compare, and remove occurrences of, one string from another in javascript?

我遇到了一個困擾我的問題。 我必須編寫一個接受兩個字符串stringA和stringB的函數,並使用stringA從stringB中刪除stringA的所有實例。 結果字符串C中應該沒有A的實例,並且空格應為零。

測試用例為:

stringA = 'ab';  
stringB = 'aabb';
stringC = ' ';

要么

stringA = ')(';  
stringB = '((()))'  
stringC = stringB;  

到目前為止,我一般的方法是從存儲在收集字符串的變量中的兩個提示開始。 .replace()都在兩者上運行以刪除任何空白。

我得到的最接近的是兩個for循環,一個是stringA,其中嵌套了字符串B,並針對彼此測試索引是否匹配。 如果不匹配,則將其推入stringC。 但是我的問題是,僅當有問題的兩個索引當時恰好匹配時,它才不會真正刪除stringA實例。

我已經在這里搜索了很多,並提出了.filter()或.replace(),但是我對如何使用它們沒有任何運氣/見識。 任何建議都將非常有幫助,我覺得我碰壁了。 這是我在jsfiddle中的代碼的鏈接

感謝大家。

UPDATE

你們很棒。 :)我不想只是偷偷地回答一個問題並將其傳遞給我,但是你們所有人都給了我很多東西供我研究和理解,以便在我解決它時,我理解為什么而不是什么。 非常感謝您的快速解答,幫助和指導。

您可以這樣:

 var stringA = 'ab', stringB = 'aabb'; do { var before = stringB; stringB = stringB.replace(stringA, ''); } while (stringB != before); alert(stringB); 

您需要執行全局搜索並替換,並對剩余的字符串再進行一次替換。

var stringA = 'ab';  
var stringB = 'aabb';
var stringC;

var regex  = new RegExp(stringA, "g");

stringC = stringB.replace(regex, "").replace(regex, "");
console.log(stringC);

如果需要循環刪除詞B中所有出現的詞A, 直到找不到匹配項 ,可以循環使用:

 function escapeRegExp(string){ return string.replace(/[.*+?^${}()|[\\]\\\\]/g, "\\\\$&"); } var stringRemover = function() { var stringA = "()"; var stringB = 'a((()))b'; var stringC = stringB; var rx = RegExp(escapeRegExp(stringA), "g"); while (stringC.indexOf(stringA) > -1) { stringC = stringC.replace(rx, ""); } document.getElementById("t").innerHTML = stringC; } stringRemover(); 
 <script src="app.js"></script> <title>challange</title> <body> <h1 id="t">String Remover</h1> </body> 

重要的是使用基於正則表達式的替換來刪除所有出現的內容(使用g修飾符是全局的),並在循環中檢查Word B是否仍然包含escapeRegExp 。要制作正確的動態正則表達式,我們應該使用escapeRegExp函數。

另一種方法,使用遞歸:

https://jsfiddle.net/iamnotsam/ytvujc9a/(<-被注釋)

 // removes all instances of a string s1 from another string s2 var removeAllSubstrings = function(s1, s2, s3) { if (s2 === '' || s2 === s3) { return s2; } return removeAllSubstrings(s1, s2.replace(s1,''), s2); } var sa = 'ab', sb = 'doaaabbbaabbababne'; // Put the final string on the screen document.getElementById("t").innerHTML = removeAllSubstrings(sa, sb); 
 <script src="app.js"></script> <title>challange</title> <body> <h1 id="t">String Remover</h1> </body> 

暫無
暫無

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

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