2012-02-07 51 views
0

我有這樣的JavaScript代碼:JavaScript中的正則表達式與字符串不匹配?

var textareas = document.getElementsByTagName('textarea'); 
var content = textareas[0].value; 
var reg = new RegExp(/^.*[[]#.+#[]].*$/mgi); 
var res = content.match(reg); // always null 

內容VAR包含包含像[#some text goes here#]圖案長的多行字符串。我用一些在線測試工具測試了正則表達式,它對字符串起作用。在JavaScript中使用正則表達式失敗 - 任何想法爲什麼?

謝謝!

+0

您在使用'^'和'$與'M'修改一起'。那麼這是否意味着你只想匹配'[#some text goes here#]'是唯一的行? – 2012-02-07 15:47:29

回答

4

這個怎麼樣?

var content = 'foo\nhead [#some text goes here#] tail\nbar'; 
var reg = new RegExp(/\[#.+#\]/mgi); 
var res = content.match(reg); 

在執行時,res包含字符串'[#some text goes here#]'

請注意,我已經逃過[]。如果他們沒有逃脫,那麼封閉在他們身上的任何東西形成一個character class

+0

不,我試過... – EOB 2012-02-07 15:41:05

+0

你嘗試了什麼?這似乎對我有用。 – 2012-02-07 15:43:48

+0

@EOB:如果它不適合你,那麼你還沒有正確描述你想要的結果。 – 2012-02-07 15:44:51

1

您使用[[]逃跑[,這是很好的,但你不能使用[]]逃避],因爲它的第一]結束字符類的正則表達式。這工作得很好:

/^.*\[#.+#\].*$/mgi 

在你只需要單塊​​,而不是整條生產線,使用的情況:

/\[#.+#\]/mgi 
+0

[[]和\\是一樣的,[不是嗎? – EOB 2012-02-07 15:41:26

+0

對不起,你說得對。更新了我的答案。 – 2012-02-07 15:43:24

0

這應該抓住哈希值之間的文本(例如, 「一些文字在這裏」):

var reg = /[^\[]*\[#([^\#]+)#\]/gims 
相關問題