我不是最好的正則表達式,需要一些幫助。Javascript正則表達式 - 匹配2個子字符串
我有這樣的字符串:data-some-thing =「5 10 red」。單詞'數據一些'是不變的,'事物'變化。 '東西'也可能包含破折號。雙引號中的值僅包含字母數字符號或空格。
是否有可能只使用正則表達式得到'東西'和雙引號的值?如果是的話,我應該用什麼樣的表情?我嘗試使用lookarounds,但沒有太多成功。
我不是最好的正則表達式,需要一些幫助。Javascript正則表達式 - 匹配2個子字符串
我有這樣的字符串:data-some-thing =「5 10 red」。單詞'數據一些'是不變的,'事物'變化。 '東西'也可能包含破折號。雙引號中的值僅包含字母數字符號或空格。
是否有可能只使用正則表達式得到'東西'和雙引號的值?如果是的話,我應該用什麼樣的表情?我嘗試使用lookarounds,但沒有太多成功。
你可以使用:
var result = data.match(/data-some-(.*?)="(.*?)"/);
結果陣列將具備三個要素:
演示:
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模塊jsdom和htmlparser做到這一點。
我瞭解點和明星,但您能否向我解釋問號在這裏的工作原理?謝謝你的答案。要儘快標記它:) – Thinch
問號影響前面的恆星。它從貪婪轉變爲懶惰的明星。實際上,這意味着只要正則表達式可以繼續前進並匹配後面的模式,它就會這樣做(懶惰)。如果沒有問號,以下數據將以錯誤的方式分割:'data-some-thing =「5 10 red」;一些其他的東西=「hallo」'。 – trincot
作爲嘗試使用正則表達式解析HTML的徒勞示例,如果該屬性值是單引號的,則將失敗。如果等號兩邊有空格,它將會失敗。輸入形式爲'xxx-data-some-thing'會失敗。等等。不要用正則表達式解析HTML。 – 2016-05-06 13:08:24
顯然(?)這是一個HTML元素的數據屬性。你爲什麼試圖用HTML上的正則表達式來做任何事情?相反,要搜索HTML元素(或者'elt.dataset')上的屬性以獲得正確形式的屬性,那麼可以直接檢索屬性的值。 – 2016-05-06 13:04:54
我會這樣做,但我使用節點解析字符串,而不是瀏覽器中的文檔。對不起,沒有完全清楚:) – Thinch
這並不改變你不應該用JS解析HTML的事實。如有必要,請爲節點使用DOM包。 – 2016-05-06 13:11:34