Re: [問題] 找出js程式碼中的特定函式字串參數

看板RegExp作者 (1597463007)時間9年前 (2015/02/02 15:46), 編輯推噓2(202)
留言4則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《mrbigmouth (大嘴先生)》之銘言: : 使用語言為Javascript : 環境為瀏覽器 : 目標為在一串"合法的"Javascript檔案中尋找特定函式的呼叫 : 並取出其中塞入的字串參數 : 舉例而言 : 當js程式裡存在i18n("123") : 我要可以抓出[123] : 目前的簡單作法是 : i18n\((?:\s*)?\"([^\"\r])*\"(?:\s*)\) : 但是問題來了 : 這種作法抓不到i18n("你好,\"王大明\"先生") : 但這對於Javascript是合法的程式碼,而且也是常常出現的情形 : 所以有辦法做到讓Regexp做到以下的match動作嗎? : i18n("你好,王大明先生") match 抓出[你好,王大明先生] : i18n("你好,"王大明"先生") not match : i18n("你好,\"王大明\"先生") match 抓出[你好,"王大明"先生] : i18n("你好,\\"王大明\\"先生") not match : i18n("你好,\\\"王大明\\\"先生") match 抓出[你好,\"王大明\"先生] javascript 的 RegExp 物件可以用 / / 語法來寫, 這樣就不用跳脫 " 跟 \ 了 你要的 RegExp 物件是 /i18n\("(([^"\\]|\\.)*)"\)/ 中間關鍵部份解析如下: " " 一個 literal 字串 ( ) 取出其內容 ( | )* 內含以下東西零或多個: [^"\\] 不是 " 或 \ 的字 \\. 或是 \ 後面跟任意一個字 參數不只一個的話就自己在適當地方加 \s* 吧 -- 有人喜歡邊玩遊戲上逼; 也有人喜歡邊聽歌打字。 但是,我有個請求, 選字的時候請專心好嗎? -- 改編自「古 火田 任三郎」之開場白 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.112.30.32 ※ 文章網址: https://www.ptt.cc/bbs/RegExp/M.1422863168.A.A6B.html

02/02 16:55, , 1F
感恩 最後我用的再加上禁止換行等判斷 為
02/02 16:55, 1F

02/02 16:56, , 2F
/i18n(?:\s*)?\((?:\s*)?"(([^"\\\n]|\\.)*)"\)/g
02/02 16:56, 2F

02/02 16:56, , 3F
最後面的\)前再加一個(?:\s*)?
02/02 16:56, 3F

02/02 17:14, , 4F
嗯因為可以換行所以其時是(?:[\s|\n]*)?
02/02 17:14, 4F
文章代碼(AID): #1Kpoj0fh (RegExp)
文章代碼(AID): #1Kpoj0fh (RegExp)