2016-05-06 33 views
1

我不是最好的正則表達式,需要一些幫助。Javascript正則表達式 - 匹配2個子字符串

我有這樣的字符串:data-some-thing =「5 10 red」。單詞'數據一些'是不變的,'事物'變化。 '東西'也可能包含破折號。雙引號中的值僅包含字母數字符號或空格。

是否有可能只使用正則表達式得到'東西'和雙引號的值?如果是的話,我應該用什麼樣的表情?我嘗試使用lookarounds,但沒有太多成功。

+0

顯然(?)這是一個HTML元素的數據屬性。你爲什麼試圖用HTML上的正則表達式來做任何事情?相反,要搜索HTML元素(或者'elt.dataset')上的屬性以獲得正確形式的屬性,那麼可以直接檢索屬性的值。 – 2016-05-06 13:04:54

+0

我會這樣做,但我使用節點解析字符串,而不是瀏覽器中的文檔。對不起,沒有完全清楚:) – Thinch

+1

這並不改變你不應該用JS解析HTML的事實。如有必要,請爲節點使用DOM包。 – 2016-05-06 13:11:34

回答

3

你可以使用:

var result = data.match(/data-some-(.*?)="(.*?)"/); 

結果陣列將具備三個要素:

  • 0:完全匹配(不是你的興趣)
  • 1:變量前面的部分等號
  • 2:引號之間的值。

演示:

var data = 'data-some-thing="5 10 red"'; 
 
var result = data.match(/data-some-(.*?)="(.*?)"/); 
 

 
document.write(result[1] + '<br>' + result[2]);

免責聲明:

請注意,如果你是在較大的HTML解析的情況下這樣做(它沒有提及問題),你不應該使用正則表達式。相反,你應該使用HTML字符串加載到DOM,並使用DOM方法來查找屬性名稱和值對你感興趣的內容。

對於Node.js的可以使用npm模塊jsdomhtmlparser做到這一點。

+0

我瞭解點和明星,但您能否向我解釋問號在這裏的工作原理?謝謝你的答案。要儘快標記它:) – Thinch

+0

問號影響前面的恆星。它從貪婪轉變爲懶惰的明星。實際上,這意味着只要正則表達式可以繼續前進並匹配後面的模式,它就會這樣做(懶惰)。如果沒有問號,以下數據將以錯誤的方式分割:'data-some-thing =「5 10 red」;一些其他的東西=「hallo」'。 – trincot

+0

作爲嘗試使用正則表達式解析HTML的徒勞示例,如果該屬性值是單引號的,則將失敗。如果等號兩邊有空格,它將會失敗。輸入形式爲'xxx-data-some-thing'會失敗。等等。不要用正則表達式解析HTML。 – 2016-05-06 13:08:24

相關問題