js 集中管理,Visual Studio 正則取代方法

最近做的專案是以集團包裏所有分館,Demo後,一直以來都修修改改的

分館又多、又還有手機版、pc版,每個館又有四個語系

我改js中1個小小bug ,要到處去找每個分館自帶的js


改到後來快瘋掉,最後決定將所有的js集中管理

通通移到根目錄,然後分2包,一包都放PC版,一包都放手機版

這樣要改,我只需要改一個地方,所有分館、語系都會設定到嘍 ^^

如果有其中某些分館比較奚佳  八,就再對他獨立開個js就好


本來很開心,沒想到客戶要改成subDomain

這樣根目錄解決不了這個問題,相對路徑不行的話

我用絕對路徑總可以吧,到時要換再整個專案打開全部取代就好



==========================================================


在改的過程中,發現有時會有這樣的情況

    <script type="text/javascript" src="js/jquery.ui.js"></script>
    <script type="text/javascript" src='js/jquery.min.js'></script>

第2個JS的引號是單引號,第1個是雙引號
所以必需先把第2個引號的值都取代掉

一開始很開心,就下正則方法:


結果就悲劇,比對到像下面的情況…


這樣不行啊,會壞頁面,經檢討一定是正則寫錯了

我沒把貪婪跟懶惰搞清楚,後來改下:

就找對了:


可是這樣取代一定出錯,因為比對出來的字串沒辦法帶回

這時感謝有Visuval Studio方便的功能可以協助找回取代中的字

使用如下:


簡單好用,在要取代中的地方加左右2個括號

而取代回來的值用$1、$2…來帶回即可

記得尋找選項要將規則運算式勾起來

==========================================================

另有的情況下,是在js中要寫正則取代,其實javascript就有這個功能:

像我在某些情況下,我想去掉html語法,但保留img 的圖片,邏輯如下:

一、先找出不是img的html語法,取代為空字串

二、為了圖片上下斷行,找到img的tag,並上下加入<br/>


 var show = orignal.replace(/<(?!img.+?src=[\"'](.+?)[\"']).*?>/g, '');
                          show = show.replace(/<img.+?src=[\"'](.+?)[\"'].*?>/g, function (reulst) { return '<br>' + reulst + '<br>' });


用replace方法中,第2個回傳個方法並帶參數,即可找到


有關貪婪及懶惰,可以參考如下:(來源)

==========================================================
不加 ? 表示贪婪,加 ? 表示勉强,区别如下:

勉强是从左边一个一个地吃直到匹配为止,不加 ?的是一口吃掉整个字符串,然后从最后一个一个地吐出来直到匹配为止

字符串
a=====b=====b===

a.*b 将匹配满足条件最长的字符串 a=====b=====b

工作方式:
首先将:a=====b=====b=== 全部吃掉,从右边一个一个地吐出来

1. a=====b=====b=== 不匹配,吐出一字符
2. a=====b=====b== 不匹配,再吐出一字符
3. a=====b=====b= 不匹配,再吐出一字符
4. a=====b=====b 匹配了,结束。如果再不匹配继续吐,直到没有字符了,匹配失败

a.*? 将匹配满足条件最短的字符串 a=====b

工作方式:
从左边一个一个地吃掉字符
1. a 不能匹配表达式,继续吃
2. a= 不能匹配表达式,继续吃
3. a== 不能匹配表达式,继续吃
4. a=== 不能匹配表达式,继续吃
5. a==== 不能匹配表达式,继续吃
6. a===== 不能匹配表达式,继续吃
7. a=====b ,终于能匹配表达式了,匹配结束,匹配位置留于字符 b 后面,继续其他的匹配。如果不能匹配则一个一个地吃掉整个字符串直到吃完为止若还没有匹配则匹配失败。

留言

熱門文章