JavaScript中的正则表达式与字符串不匹配?

问题描述:

我有这样的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

这个怎么样?

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

您使用[[]逃跑[,这是很好的,但你不能使用[]]逃避],因为它的第一]结束字符类的正则表达式。这工作得很好:

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

在你只需要单块​​,而不是整条生产线,使用的情况:

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

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

+0

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

这应该抓住哈希值之间的文本(例如, “一些文字在这里”):

var reg = /[^\[]*\[#([^\#]+)#\]/gims