1. 程式人生 > 其它 >SringBoot專案vue跨域問題

SringBoot專案vue跨域問題

正則表示式是對字串(包括普通字元(例如,a 到 z 之間的字母)和特殊字元(稱為“元字元”))操作的一種邏輯公式,就是用事先定義好的一些特定字元、及這些特定字元的組合,組成一個“規則字串”,這個“規則字串”用來表達對字串的一種過濾邏輯。正則表示式是一種文字模式,模式描述在搜尋文字時要匹配的一個或多個字串。

JavaScript通過RegExp來支援正則表示式。正則表示式建立方式 var reg=/pattern/flags。其中pattern可以是任何簡單或者複雜的正則表示式,可以包含字串、分組、限定符、向前查詢以及方向引用。每個正則表示式可以帶有一個或者多個標記,用以表達正則表示式的行為。正則表示式匹配模式包含3個標記:

g:表示全域性模式,模式應用於所有字串,而非發現第一個匹配項立即停止。

i:表示不區分大小寫,在確定匹配項時忽略模式與字串的大小寫。

m:多行模式,在到達一行末尾時,還會繼續查詢下一行中是否存在於模式匹配的項。

因此,一個正在表示式就是一個模式與3個標記的組合體,不同的組合產生不同的效果。模式中使用的元字元必須轉義,元字元包括( [ {  ^ $ | ) ? * + . ] }。

                                //匹配字串中所有at的例項
                var pattern1 =/at/g;
                //匹配字串中一個‘bat’或者‘cat’,不區分大小寫
                var pattern2=/[bc]at/;
                //匹配字串中所有以at結尾的三個字串,不區分大小寫
                var pattern3=/.at/gi;
                //匹配字串中一個[bc]at,不區分大小寫
                var pattern4=/[bc]at/;
                //匹配字串中所有以.at,不區分大小寫
                var pattern5=/.at/gi;    

上述程式碼中 pattern1匹配字串中所有at的例項,pattern2匹配字串中第一個bat或者cat,不區分大小寫。pattern3匹配字串中以at結尾的三個字串,不區分大小寫。pattern4匹配字串中第一個[bc]at的字元,不區分大小。這裡對[]進行了轉義。pattern5同樣進行了轉義,所以匹配字串中所有.at字元。

var pattern6 = new RegExp("\.at","gi");

通過RegExp函式定義的正則表示式與字面量定義的有點不同。上面的pattern6與pattern5是一樣的效果,但是RegExp的兩個引數都是字串,所以需要對第一個引數的字元進行雙重轉義。

               for(var i=0;i<10;i++){
                    var pattern=/at/g;
                    var index=pattern.test("cathello");
                }

RegExp的每個例項都有以下屬性:

global:布林值,表示是否設定了g標誌;

ignoreCase:布林值,表示是否設定了i標誌;

lastIndex:表示開始搜尋下一個匹配項的字元位置,從0開始;

mutilline:表示是否設定了m標記

source:正則表示式的字串表示;

RegExp的例項方法exec,可以捕獲組。exec方法接受一個引數,就是要進行應用模式的字串。返回包含第一個匹配項資訊的陣列,在沒有匹配項的情況下返回null。返回的數字是Array例項,但是包含index和input兩個屬性。index表示匹配項的位置,input表示應用正則表示式的字串。

如果 exec() 找到了匹配的文字,則返回一個結果陣列。否則,返回 null。此陣列的第 0 個元素是與正則表示式相匹配的文字,第 1 個元素是與 RegExpObject 的第 1 個子表示式相匹配的文字(如果有的話),第 2 個元素是與 RegExpObject 的第 2 個子表示式相匹配的文字(如果有的話),以此類推。除了陣列元素和 length 屬性之外,exec() 方法還返回兩個屬性。index 屬性宣告的是匹配文字的第一個字元的位置。input 屬性則存放的是被檢索的字串 string。我們可以看得出,在呼叫非全域性的 RegExp 物件的 exec() 方法時,返回的陣列與呼叫方法 String.match() 返回的陣列是相同的。

但是,當 RegExpObject 是一個全域性正則表示式時,exec() 的行為就稍微複雜一些。它會在 RegExpObject 的 lastIndex 屬性指定的字元處開始檢索字串 string。當 exec() 找到了與表示式相匹配的文字時,在匹配後,它將把 RegExpObject 的 lastIndex 屬性設定為匹配文字的最後一個字元的下一個位置。這就是說,您可以通過反覆呼叫 exec() 方法來遍歷字串中的所有匹配文字。當 exec() 再也找不到匹配的文字時,它將返回 null,並把 lastIndex 屬性重置為 0。

如果在一個字串中完成了一次模式匹配之後要開始檢索新的字串,就必須手動地把 lastIndex 屬性重置為 0。

function RegExpTest() {
                    var src = "The rain in Spain falls mainly in the plain.";
                    var re = /(w+)/g; // 建立正則表示式模式。    
                    var arr;
                    while((arr = re.exec(src)) != null) {
                        //document.write(arr.index + "-" + RegExp.lastIndex + "t" + arr[0]); //此處RegExp.lastIndex和arr.lastIndex均有同樣的屬性,可以互換。在此注意IE6和7的lastIndex重設定0的bug
                        console.log(arr.index+"-"+re.lastIndex+"-"+arr[0]);
                    }
                };

                RegExpTest();

如果上面的正則表示式不是全域性表示式,則上述迴圈為死迴圈,因為re的lastindex在執行之後,屬性被重置為0,所以迴圈一直在0,3處迴圈。

 正則表示式的第二個方法是test(),它接受一個字串引數,在模式與該引數匹配的情況下,返回true;否則返回false。在只想知道目標字串與模式是否匹配時,可以使用test方法。test方法經常被用在if中。

var pattern1 =/at/g;
                if(pattern1.test("cat")){
                    console.log("the pattern is matched");
                }

上面的程式碼test方法返回true。

JavaScript的模式匹配有一定侷限性,如向後查詢,並集和交集等。