2017-03-02 39 views
0

鑑於字符串如:隔離子字符串非貪婪?

foo/**hello**/baré 
foo/crazy/**hello**/baré 
**hello**/crazy/baré 

對於每一線,如何通過一個JS隔離hello(在**之間的文本)?(?正則表達式搜索)

(輸出通緝的每一行是hello


到目前爲止,我失敗有:.*?\*\*(.*?)\*\*.*? =>$1給我:

hello/baré 
hello/baré 
hello/crazy/baré 
+0

您是否使用replace來獲取輸出?然後最後的'。*?'必須是貪婪的以匹配字符串的末尾。如果你使用匹配你的正則表達式,它應該工作正常。 –

回答

3

你可以使用與除*以外的任何字符匹配的表達式:

const inputs = [ 
 
    'foo/**hello**/baré', 
 
    'foo/crazy/**hello**/baré', 
 
    '**hello**/crazy/baré' 
 
]; 
 

 
inputs.forEach(input => { 
 
    const matches = input.match(/.*\*\*([^*]+)\*\*.*/); 
 
    console.log(matches[1]); 
 
});

+0

每行所需的輸出是'hello'。根據我的測試,你的答案不會這樣做。 – Hugolpz

+0

我添加了一個可執行的代碼片斷,向控制檯輸出「hello」3次:-) –

+0

哦。你使用'.match()'。 – Hugolpz

2

用一句話,只是用\w

\*+(\w+)\*+ 

Demo

如果你想具體爲2 *只是做

\*{2}(\w+)\*{2} 

如果你有一個句子或段落或混合字符,搜索字符除了起始和結束分隔符:

\*{2}([^*]+)\*{2} 
+0

感謝您的回答!我把你的想法寫成:{2}':D – Hugolpz