很難把一切都在問題的標題,因爲它是具體取決於人想分裂什麼的字符串。但在這裏,它是:邏輯的正則表達式在JavaScript字符串分割到多個字符串
我在其中有多個腳本標記的字符串:
<script type="text/javascript" src="/javascripts/something-1.js"></script>
<script type="text/javascript" src="/javascripts/something-2.js"/>
<script type="text/javascript" src="/javascripts/something-3.js"></script>
<link rel="stylesheet" type="text/css" href="/something-1.css">
我想這個字符串分割成多個字符串,每個包含腳本標籤(忽略鏈接標籤)。這是我做的:
var scripts = code.match(/<script.*src=.*(\/>|<\/script>)/g);
這是與結束標記要麼/>
或</script>
匹配script標籤。然而,有了這個當前的正則表達式,我總是得到:
<script type="text/javascript" src="/javascripts/something-1.js"></script>
<script type="text/javascript" src="/javascripts/something-2.js"/>
作爲一個字符串 - 不是兩個。
怎樣的正則表達式是這樣的:
/<script.*src=((not script not link) /> | (not link) <\/script>)/g
「m」標誌不相關。只有當你使用錨點('^'和'$')來匹配行的開始和結束時才重要。 – 2012-04-25 01:57:42
請原諒我的無知(這是一個嚴重的問題),但是如果結束標記位於以下行中,例如?將省略** m **旗子仍然讓它被抓住? – inhan 2012-04-25 02:02:24
在這種情況下,你的regex會失敗,因爲'.'與換行符不匹配,多行模式不會改變它。它所做的只是改變'^'和'$'的行爲,允許它們在行邊界以及整個字符串的開始和結尾進行匹配。經常重複的建議「如果源字符串是多行,你必須使用多行模式」是錯誤的。您可能會考慮*單行*或* DOTALL *模式,它使'.'匹配任何字符,但JavaScript不支持。 – 2012-04-25 03:05:52