[英]JavaScript RegEx between tags not working using console.log
[英]Using sed to remove all console.log from javascript file
我正在嘗試從我的 JS 文件中刪除我所有的console.log
、 console.dir
等,然后再用 YUI (在 osx 上)縮小它。
我為控制台語句得到的正則表達式如下所示:
console.(log|debug|info|warn|error|assert|dir|dirxml|trace|group|groupEnd|time|timeEnd|profile|profileEnd|count)\((.*)\);?
如果我用RegExr測試它,它就可以工作。 但它不適用於sed
。
我必須改變什么才能讓它工作?
sed 's/___???___//g' <$RESULT >$RESULT_STRIPPED
更新
得到第一個答案后,我嘗試了
sed 's/console.log(.*)\;//g' <test.js >result.js
這有效,但是當我添加一個 OR
sed 's/console.\(log\|dir\)(.*)\;//g' <test.js >result.js
它不會取代“日志”:
你原來的表情看起來不錯。 您只需將-E
標志傳遞給sed
,用於擴展正則表達式:
sed -E 's/console.(log|debug|info|...|count)\((.*)\);?//g'
這些類型的正則表達式之間的區別在man re_format
中進行了解釋。 老實說,我從未閱讀過該頁面,而是在事情沒有按預期工作時簡單地加上-E
。 =)
您必須在sed
的正則表達式語法中轉義(
(用於分組)和|
(用於 oring)。例如:
sed 's/console.\(log\|debug\|info\|warn\|error\|assert\|dir\|dirxml\|trace\|group\|groupEnd\|time\|timeEnd\|profile\|profileEnd\|count\)(.*);\?//g'
更新示例:
$ sed 's/console.\(log\|debug\|info\|warn\|error\|assert\|dir\|dirxml\|trace\|group\|groupEnd\|time\|timeEnd\|profile\|profileEnd\|count\)(.*);\?//g'
console.log # <- input line, not matches, no replacement printed on next line
console.log
console.log() # <- input line, matches, no printing
console.log(blabla); # <- input line, matches, no printing
console.log(blabla) # <- input line, matches, no printing
console.debug(); # <- input line, matches, no printing
console.debug(BAZINGA) # <- input line, matches, no printing
DATA console.info(ditto); DATA2 # <- input line, matches, printing of expected data
DATA DATA2
HTH
這是我的實現
for i in $(find ./dir -name "*.js")
do
sed -E 's/console\.(log|warn|error|assert..timeEnd)\((.*)\);?//g' $i > ${i}.copy && mv ${i}.copy $i
done
從 github 拿了 sed 東西
我還找到了刪除所有 console.log 的方法,我正在嘗試使用 python 來執行此操作,但我發現 Regex 不適用於。 我的寫作是這樣的:
var re=/^console.log(.*);?$/;
但它將匹配以下字符串:
'console.log(23);alert(234dsf);'
它有效嗎? 與
"s/console.(log|debug|info|...|count)((.*));?//g"
我感到很懶,希望找到一個腳本來復制和粘貼。 唉,沒有一個,所以對於像我這樣的懶人來說,這是我的。 它位於與要縮小的文件相同的目錄中名為“minify.sh”的文件中。 它將覆蓋原始文件並且它需要是可執行的。
#!/bin/bash
for f in *.js
do
sed -Ei 's/console.(log|debug|info)\((.*)\);?//g' $f
yui-compressor $f -o $f
done
我想在這里補充一點,我遇到了命名空間控制台日志的問題,例如 window.console.log。 此外,Tweenmax.js 在某些部分對 console.log 有一些有趣的用途,例如
window.console&&console.log(t)
所以我用了這個
sed -i.bak s/[^\&a-zA-Z0-9\.]console.log\(/\\/\\//g js/combined.js
正則表達式有效地表示替換所有不以 &、字母數字和和開頭的 console.logs。 帶有 '//' 注釋,稍后將 uglify 刪除。
Rodrigocorsi 的作品帶有嵌套的括號。 我加了一個? 之后; 因為 yuicompressor 省略了一些分號。
這可能不起作用的原因是您沒有“限制”正則表達式在方法參數中不包含右括號 ( )
。
試試這個正則表達式:
console\.(log|trace|error)\(([^)]+)\);
請記住在捕獲組中包含方法名稱的 rest。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.