天天看點

簡述test()、match()、replace()和search()的用法

如果你使用過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()這一個操作特例就行啦~~

繼續閱讀