2017-07-28 24 views
1

我有一個字符串,比如這個:正則表達式逃避<!here|@here>所有比賽用@here或空白

var myString = 'Hi, <!here|@here>'; 

我想逃避什麼,可能是由API被誤解爲HTML,認爲正則表達式是完美的,但我無法弄清楚。在上面的字符串運行後

理想輸出:

嗨,@here

這是我到目前爲止已經試過:

var result = myString.replace(/(<!.*\|.*)@.*(>)/gm,' '); 

console.log(string,result); 

我越來越這裏是一個空白的迴應在此期間使用regex101進行測試。點星級.*

+4

請提供真實世界的輸入/期望的輸出樣本。 – revo

+1

我無法弄清楚你想在這裏取代什麼。 –

+0

更正了我的帖子,我的壞! – Tiago

回答

2

存在 - 爲太貪婪 - 將可能使在正則表達式的問題。你不需要尾隨和領先的點星,否則他們會消耗你的輸入字符串中的所有內容。

另外請記住,當你想在特定點停下來時不要使用點星,因爲它可能不會停在正確的地方。

var myString = 'Hi, <!here|@here>'; 
 
var result = myString.replace(/<!(.*?)\|@\1>/g, '@$1'); 
 
console.log(result);

+0

這將更準確,而不是使用一個懶惰的星級,使用白名單字符' |] *)\ | @ \ 1>' – revo

+1

謝謝@revo,$ 1佔位符是我不'不知道,今天學到了新東西。 – Tiago

+0

不客氣! @Tiago – revo

0

你應該使用這個

myString.replace(/(<!.*\|)(.*)>/g, '$2'); 

或懶惰正則表達式版本:/(<!.*?\|)(.*)>/g(這取決於你想如何工作)