2016-04-14 74 views
1

我在node.js中有一個正則表達式,它匹配一些奇怪的東西。看看這個:奇怪的正則表達式匹配node.js

var regex = new RegExp('(<\?%)|(%\?>)', 'g'); 
 
console.log('<tag><?%text%?></tag>'.match(regex));

引出[ '>', '%', '%', '>', '>' ],我不明白爲什麼。

其目的是匹配<?%%?>,它在https://regex101.com/上工作得很好。

回答

3

那是因爲你還沒有逃過\。它應該是\\

按下Ctrl鍵++,去Console和粘貼下面的代碼。

var regex = new RegExp('(<\\?%)|(%\\?>)', 'g'); 
console.log('<tag><?%text%?></tag>'.match(regex)); 
+0

否;那是不正確的做正則表達式的方法。 – SLaks

+0

@SLaks:你的理由是正確的。我顯示了爲什麼OP的代碼不工作,因爲'\'是未轉義的。 – 2016-04-14 18:34:23

+1

這實際上雖然工作,但...我錯過了什麼@SLaks? – brandonscript

2

您的反斜槓被字符串逸出吞噬。

您應該使用正則表達式來代替:/(<\?%)|(%\?>)/g

+0

您的徽章正在破解CSS。應該通知Meta! – 2016-04-14 18:36:45

+0

是的,noob是對的,就像一個bug。另外還有一件奇怪的事情。 SLaks有500k代表,我從來沒有在這裏見過他。你到哪裏去過? '':-) – Shafizadeh