2010-12-08 40 views
0

我目前在我的脚本中有这个,我不确定它为什么不起作用。它在一个正则表达式测试器上工作,它是一个非常简单的正则表达式。 为什么不是这个正则表达式在JavaScript中工作?

var page = '<div id="loginOverlay" class="loginOverlay">' + 
'<div id="loginForm">' + 
     '<form name="loginForm" method="post" action="/test.jspx" onsubmit="grayLoginAnonymous();return false;" style="margin:0px;" autocomplete="off"><input type="hidden" name="org.apache.struts.taglib.html.TOKEN" value="21a9e5a4197cfaefec409d8473f29a6e" />'+  
    ' </form>'+ 
    ' </div> '+ 
' </div>'; 

var pattern = /<input type='hidden' name='org.apache.struts.taglib.html.TOKEN' value='((\d|\w)+)' \/>/; 
var match = page.match(pattern); 
document.write(match); 
console.log(page); 
console.log(match); 

</script> 

匹配返回'null'。 有人可以指出这个问题吗?

+1

我认为这是因为你正试图完全匹配该模式,当var页面包含字符之前和之后的模式。尝试在开始和结束时放置一个*。您可能还需要指定跨越新行的匹配。 – 2010-12-08 10:35:45

+1

请注意`.`表示正则表达式中的“任何字符”。因此,虽然它也会匹配一个字面点,但如果您希望正则表达式匹配一个实际的点,则应该更具体一些,并写入`\ .`。 – 2010-12-08 10:35:46

回答

4

您使用单引号而不是双引号。改变模式,这将工作:

var pattern = /<input type="hidden" name="org.apache.struts.taglib.html.TOKEN" value="((\d|\w)+)" \/>/; 

此外,请务必照顾蒂姆Pietzcker在他的评论中指出的点!

相关问题