2014-10-06 25 views
-1

我有以下文字:的Javascript正则表达式失败(循环?)

<meta http-equiv="CONTENT-TYPE" content="text/html; charset=utf-8"><title>test file</title><meta name="GENERATOR" content="LibreOffice 4.1.4.2 (Windows)"><meta name="CREATED" content="0;0"><meta name="CHANGED" content="0;0"><style type="text/css"> 
    <!-- 
     .nicEdit-main { margin-left:55px; margin-right:36px; margin-top:18px; margin-bottom:36px } 
     P { margin-bottom: 0.21cm; direction: ltr; color: #000000; text-align: left; widows: 2; orphans: 2 } 
     P.western { font-family: "Times New Roman", serif; font-size: 12pt; so-language: ru-RU } 
     P.cjk { font-family: "Arial", sans-serif; font-size: 12pt; so-language: zh-CN } 
     P.ctl { font-family: "Symbol"; font-size: 12pt; so-language: hi-IN } 
     TD P { margin-bottom: 0.21cm; direction: ltr; color: #000000; text-align: left; widows: 2; orphans: 2 } 
     TD P.western { font-family: "Times New Roman", serif; font-size: 12pt; so-language: ru-RU } 
     TD P.cjk { font-family: "Arial", sans-serif; font-size: 12pt; so-language: zh-CN } 
     TD P.ctl { font-family: "Symbol"; font-size: 12pt; so-language: hi-IN } 
    --> 
    </style><div type="HEADER"> 
    <p class="western" style="margin-bottom: 0.38cm; text-align: left;" align="LEFT"> 
    <br><br> 
    </p> 
</div><p style="margin-top: 0.42cm; margin-bottom: 0.42cm; text-align: center;" class="western" align="CENTER"> <span class="divider"> 
<b>He</b><i><span style="text-decoration: underline;"><b>-llo</b></span></i><b>,&nbsp;World!!!!!</b></span> </p><p style="margin-top: 0.42cm; margin-bottom: 0.42cm; text-align: center;" class="western" align="CENTER"> <span class="divider"><br></span> <span class="divider"><br></span> </p><p style="margin-top: 0.56cm; margin-bottom: 0.56cm; text-align: center;" class="western" align="CENTER"> <span class="divider"> 
<font size="6"><b>h1&nbsp;h1&nbsp;h1</b></font></span> 

而且下面的正则表达式:

/<style type="text\/css">+(.*?\n.*?)+<\/style>/i 

,当我在正则表达式测试仪测试它,正则表达式正确认定<风格> < /风格>部分。但是,当我试图执行它的实时代码,它通过超时regex.exe()

stucks和崩溃我做错了什么?

+1

这些是什么'+'。应该在你的正则表达式呢?请解释 – Bergi 2014-10-06 15:12:34

+0

你想做什么?在'style'标签之间抽取所有内容?你有现场样品吗? – 2014-10-06 15:14:59

+2

你不能只使用常规的元素选择方法吗?例如,'document.querySelectorAll('style [type =“text/css”]')'会为''''''type''属性设置所有'style'元素。 – 2014-10-06 15:16:35

回答

1

style元素是一个普通的HTML元素,可以使用常规的JavaScript元素选择方法来拉取。举例来说,这将让你的所有style元素的数组与type属性设置为“text/CSS”:

document.querySelectorAll('style[type="text/css"]'); 

这会给你一个包含所有匹配的元素的数组:

[ 
    <style type="text/css">...</style>, 
    ... 
] 

要提取内容,您可以简单地使用innerText。例如,为了获得第一个匹配style元素的内容,你会打电话innerText[0]指数:

document.querySelectorAll('style[type="text/css"]')[0].innerText;