倚天杖
2019-08-31 11:10:15
我試圖解析是由由兩種分離的key = value對的URL編碼的字符串&或&。以下內容僅匹配第一次出現,將鍵和值分解為單獨的結果元素:var result = mystring.match(/(?:&|&)?([^=]+)=([^&]+)/)字符串'1111342 = Adam%20Franco&348572 = Bob%20Jones'的結果將是:['1111342', 'Adam%20Franco']使用全局標志'g'將匹配所有匹配項,但僅返回完全匹配的子字符串,而不是分離的鍵和值:var result = mystring.match(/(?:&|&)?([^=]+)=([^&]+)/g)字符串'1111342 = Adam%20Franco&348572 = Bob%20Jones'的結果將是:['1111342=Adam%20Franco', '&348572=Bob%20Jones']雖然我可以&單獨拆分字符串并分別拆分每個鍵/值對,但是有沒有辦法使用JavaScript的正則表達式支持來匹配模式的多次出現,/(?:&|&)?([^=]+)=([^&]+)/類似于PHP的preg_match_all()函數?我的目標是通過某種方式獲得結果,子匹配分開如下:[['1111342', '348572'], ['Adam%20Franco', 'Bob%20Jones']]要么[['1111342', 'Adam%20Franco'], ['348572', 'Bob%20Jones']]
3 回答

慕妹3242003
TA貢獻1824條經驗 獲得超6個贊
如果你不想依賴于運行exec樣式匹配所帶來的“盲目匹配” ,那么JavaScript確實帶有內置的全匹配功能,但它是replace函數調用的一部分,當使用“如何處理捕獲”時小組“ 處理功能:
var data = {};
var getKeyValue = function(fullPattern, group1, group2, group3) {
data[group2] = group3;
};
mystring.replace(/(?:&|&)?([^=]+)=([^&]+)/g, getKeyValue);
完成。
而不是使用捕獲組處理函數來實際返回替換字符串(對于替換處理,a這里調用的第一個arg 是完整模式匹配,后續args是單獨的捕獲組,在這種情況下b是組1,c組2等)我們只需捕獲第2組和第3組,并緩存該對。
因此,不要編寫復雜的解析函數,請記住JavaScript中的“matchAll”函數只是用替換處理函數“替換”,并且可以獲得很多模式匹配效率。
添加回答
舉報
0/150
提交
取消