我需要提取一個位于更大字串中的 JSON 字串(我知道,我只需要處理糟糕的 API 回應)。無論如何,我構建了一個正則運算式來讀取 {} 中的所有內容,它適用于所有測驗情況,除了下面代碼段中的實際 API 回應。
任何想法為什么它不起作用以及如何使它起作用?
let dd = 'Error: Internal JSON-RPC error.\n{\n "code": 3,\n "message": "execution reverted: This limited season is sold out. Please wait for the next season.",\n "data": "0x08c379a00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004154686973206c696d6974656420736561736f6e20697320736f6c64206f75742e20506c65617365207761697420666f7220746865206e65787420736561736f6e2e00000000000000000000000000000000000000000000000000000000000000"\n}';
alert(RegExp(/{.*}/).exec(dd))
uj5u.com熱心網友回復:
您需要添加一個s標志作為RegExp建構式的第二個引數:
s - ("dotAll") 允許 . 匹配換行符。
let dd = 'Error: Internal JSON-RPC error.\n{\n "code": 3,\n "message": "execution reverted: This limited season is sold out. Please wait for the next season.",\n "data": "0x08c379a00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004154686973206c696d6974656420736561736f6e20697320736f6c64206f75742e20506c65617365207761697420666f7220746865206e65787420736561736f6e2e00000000000000000000000000000000000000000000000000000000000000"\n}';
alert(RegExp('{.*}', 's').exec(dd))
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/RegExp
uj5u.com熱心網友回復:
內容在多行之間不匹配,因此您可以使用/s修飾符來包含新行。使用正則運算式語法時也不需要 Regexp()(/{.*}/s與 相同Regexp('{.*}','s')):
alert(/{.*}/s.exec(dd))
let dd = 'Error: Internal JSON-RPC error.\n{\n "code": 3,\n "message": "execution reverted: This limited season is sold out. Please wait for the next season.",\n "data": "0x08c379a00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004154686973206c696d6974656420736561736f6e20697320736f6c64206f75742e20506c65617365207761697420666f7220746865206e65787420736561736f6e2e00000000000000000000000000000000000000000000000000000000000000"\n}';
alert(/{.*}/s.exec(dd))
uj5u.com熱心網友回復:
試試這個匹配一切的運算式。
/\{[\s\S]*\}/.exec(dd)
您創建的那個不起作用,因為它包含 linebreaks \n。
uj5u.com熱心網友回復:
使用另一種方法 using.match()實際上將回傳與您要提取的字串的匹配項,該字串位于{curly括號} 內。帶有兩個標志s以啟用搜索新行和 g 以進行全域搜索
dd.match(/\{(.*)?\}/sg)[0]
結果
{\n "code": 3,\n "message": "execution reverted: T…0000000000000000000000000000000000000000000000"\n}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/336577.html
標籤:javascript 正则表达式
