如果你使用過Javascript中的正規表達式,那麼你對test()、match()、replace()和search()這四個方法中的其中一個一定不陌生,那就是test()。個人感覺test()方法是使用頻率最高的一個了,至少在表單驗證方面如此。那麼接下來,我将簡單講講這四個方法的基本用法。
一、test(),用于檢測一個字元串是否比對某個正規表達式
使用方法:
RegExpObject.test(string)
其中RegExpObject代表正規表達式,string代表需要檢測的字元串。該方法傳回一個布爾值,true代表比對成功,false代表失敗。
舉個栗子~
var str1 = 'Hello,我叫Real';
var str2 = '大家好,我叫張三';
這裡有兩個字元串(本文所有例子都将使用到這兩個字元串),接下來我想要檢測字元串中是否存在英文字元串,這時就可以使用test()來實作:
console.log(/\w+/.test(str1)); //true
console.log(/\w+/.test(str2)); //false
可以看出,str1是存在英文字元串的,而str2不存在。
可是,雖然我已經知道了str1存在英文字元串,但是我并不知道這樣的字元串有多少,又具體存在哪些,這該如何實作呢?
這時match()就閃亮登場啦!
二、match(),可在字元串内檢索指定的值,或找到一個或多個正規表達式的比對
stringObject.match(searchvalue)
stringObject.match(regexp)
其中stringObject代表需要比對的字元串,searchvalue代表需要從字元串中檢索的内容,regexp代表正規表達式。該方法傳回一個數組,但是分為兩種情況:
① regexp 沒有标志 g。
這種情況傳回的數組隻包含第一個比對項,如果未找到比對項将傳回null。該傳回的數組中,除了正常的數組元素外,還存在index和input兩個對象屬性,index存儲的是比對項在stringObject中的位置,而input存儲的是stringObject的引用。比如:
console.log(str1.match('Hello')); //傳入字元串,傳回 ["Hello"]
console.log(str1.match(/\w+/)); //傳入正規表達式,傳回 ["Hello"]
② regexp 具有标志 g。
這種情況代表全局比對,傳回的數組由所有比對到的字元串元素組成。比如:
console.log(str1.match(/\w+/g)); //找到兩個比對項,傳回 ["Hello", "Real"]
console.log(str2.match(/\w+/)); //未找到比對項,傳回null
三、replace(),用于在字元串中用一些字元替換另一些字元,或替換一個與正規表達式比對的子串
stringObject.replace(regexp/substr,replacement)
其中stringObject與regexp同上,substr代表需要被替換掉的子字元串,replacement代表替換文本或生成替換文本的函數。該方法傳回替換成功之後的字元串。
console.log(str1.replace('Hello','Hi')); // "Hi,我叫Real"
console.log(str1.replace(/Hello/,'Hi')); // "Hi,我叫Real"
console.log(str2.replace(/Hello/,'Hi')); // 未比對到被替換内容,傳回原字元串"大家好,我叫張三"
str3 = "Hi,Real";
console.log(str3.replace(/(\w+),(\w+)/, "$2,$1")); //将子字元串交換位置,傳回"Real,Hi"
console.log(str1.replace(/\w+/,function(word){ //将字元串中的第一個比對元素改為大寫,傳回字元串"HELLO,我叫Real"
return word.toUpperCase();
}));
四、search(),用于檢索字元串中指定的子字元串,或檢索與正規表達式相比對的子字元串
stringObject.search(searchvalue)
stringObject.search(regexp)
其中stringObject與regexp同上,傳回stringObject中第一個與 regexp 相比對的子串的起始位置。
同樣舉個例子:
console.log(str1.search(/\w+/)); // 0
console.log(str1.search('Real')); // 8
console.log(str1.search(/\w+/g)); // 0
console.log(str2.search(/\w+/)); // -1
通過第一行和第三行可以看出,用于全局比對的 “g” 然而并沒有什麼卵用,原因是search()隻傳回第一個比對元素的起始位置。
通過最後一行可以看出,當無法比對任何元素時該函數将傳回 -1。
結束語: 本文隻是簡單講了這四個函數的用法,而對于正規表達式基本文法的話在此就不詳述了。還有一點要注意的是,除了test()之外的其他三個函數,正規表達式都是作為函數參數傳入其中的,是以隻需記住test()這一個操作特例就行啦~~