2014-03-31 60 views
0

我有以下的正則表達式返回關鍵字值:JavaScript的 - 正則表達式,在任何順序相匹配

var keywords = result.match(/<meta name="keywords" content="(.*?)".*/i)[1]; 

我還需要能夠支持這裏的「關鍵詞」和「內容」特性在情況相反的順序例如:

<meta content="...." name="keywords" 

任何人都可以建議如何我可以支持這兩個訂單?

+0

如果這個正則表達式工作,我不會試圖過分複雜的東西,只是使用另一個與名稱和內容顛倒,然後檢查哪一個返回值。 – aurbano

+0

難道你不能只瞄準給定的'meta [name = keyword]'元素嗎? – eithed

回答

0

使用積極的先行先檢查name="keywords"存在,然後解析content

var keywords = result.match(/<meta(?=[^>]*\bname="keywords")[^>]*\bcontent="(.*?)".*/i)[1]; 
+1

如果關鍵字碰巧包含'>'會怎麼樣? http://xkcd.com/859/ –

+0

@NiettheDarkAbsol可以包含'>'字符?我對htmls不太瞭解。但是這種情況不會奏效。 –

+0

是的,屬性可以包含'>',這是小馬出現的原因之一;) –

1

THE PONY HE COMES

在您的指尖訪問DOM,你沒有理由不傾倒你的HTML到一個臨時文件(或者,如果它是當前文檔,從這裏就可以工作)。然後,根據瀏覽器版本,您可以只使用querySelector("meta[name=keywords]")或通過getElementsByTagName('meta')迭代,直到找到合適的一個,然後使用getAttribute("content")獲得結果。