2017-06-26 49 views
1

我有一個字符串要搜索,我需要匹配並返回搜索字符串開頭的另一個字符串。被搜索的字符串中可能有空格,爲了搜索目的,該字符串需要被忽略,但仍然準確地返回。要匹配的字符串永遠不會有空白。如何匹配另一個字符串內的字符串,同時忽略空白

stringB = "This Is A String"; //"This Is A String" 
stringB = "ThisIsAlsoAString"; //undefined 
stringB = "ThisIs A String With Extra Words At The End"; //"ThisIs A String" 
stringB = "Hey, ThisIsAString";  //undefined 

什麼是有效的方式做到這一點:相比stringB時

stringA = "ThisIsAString"; 

應該給下面的結果?

+1

一個瘋狂的解決方案,刪除所有的空格做comparaison ...併發症會得到從原來的字符串。不太有效的方法是迭代String並檢查每個字符的字符'StringA',從那裏你可以跳過這個空間。我不知道正則表達式是否足以知道是否有等效 – AxelH

回答

1

您可以使用\s*匹配零個或多個空格。通過下面的代碼,我們在每個角色之間放置了一個匹配器。

const stringA = "ThisIsAString"; 
 

 

 
const tests = [ 
 
    "This Is A String", 
 
    "ThisIsAlsoAString", 
 
    "ThisIs A String With Extra Words At The End", 
 
    "Hey, ThisIsAString", 
 
]; 
 

 
const optionalSpaces = '\\s*'; 
 

 

 
const results = tests.map(test => 
 
    test.match(
 
    new RegExp(stringA.split('').join(optionalSpaces)) 
 
) 
 
); 
 

 
console.log(results);

+1

是的,拆分連接比我的正則表達式更清潔。 – georg

+0

希望有些更優雅:P。這工作雖然。 – KingSupernova

0

一個簡單的方法來做到這一點將是從你比較的兩件事情中刪除所有的空白空間。

var search = "Hello There"; 
var text = "HelloThere I'm Greg"; 
var found = text.replace(/ +?/g, '').indexOf(search.replace(/ +?/g, '')) !== -1; 
+0

問題是,它們也需要匹配的部分。 – georg

+0

如果'found' = true,那麼通過返回'search'很容易。 – Zoomyzoom

+0

是的,但他們需要返回'text'的匹配部分,而不是'search'字符串本身。 – georg

相關問題