作者LPH66 (1597463007)
看板RegExp
标题Re: [问题] 找出js程式码中的特定函式字串参数
时间Mon Feb 2 15:46:05 2015
※ 引述《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://webptt.com/cn.aspx?n=bbs/RegExp/M.1422863168.A.A6B.html
1F:推 mrbigmouth: 感恩 最後我用的再加上禁止换行等判断 为 02/02 16:55
2F:→ mrbigmouth: /i18n(?:\s*)?\((?:\s*)?"(([^"\\\n]|\\.)*)"\)/g 02/02 16:56
3F:→ mrbigmouth: 最後面的\)前再加一个(?:\s*)? 02/02 16:56
4F:推 mrbigmouth: 嗯因为可以换行所以其时是(?:[\s|\n]*)? 02/02 17:14