正則表達(dá)式通常稱(chēng)為“regex”或“ RegExp”,是用于匹配字符串中字符組合的模式。
正則表達(dá)式是當(dāng)今可用的功能最強(qiáng)大的工具之一,可以有效地處理和操作文本。
正則表達(dá)式可用于執(zhí)行所有類(lèi)型的文本搜索和文本替換操作。
正則表達(dá)式可以是單個(gè)字符,也可以是更復(fù)雜的模式。
在JavaScript中,正則表達(dá)式也是對(duì)象。
您可以通過(guò)以下兩種方式之一創(chuàng)建正則表達(dá)式:
使用正則表達(dá)式文字,由包含在斜線(xiàn)之間的模式組成,如下所示:
var regex = /nhooo/g
或調(diào)用RegExp對(duì)象的構(gòu)造函數(shù),如下所示:
var regex = new RegExp("nhooo", "g");
示例說(shuō)明:
nhooo是一種模式(用于搜索)
g是修飾符(執(zhí)行全局匹配)
使用構(gòu)造函數(shù)可以提供正則表達(dá)式的運(yùn)行時(shí)編譯。
當(dāng)您不知道模式并從其他來(lái)源(例如用戶(hù)輸入)獲取模式時(shí),請(qǐng)使用構(gòu)造函數(shù)。
注:該文本語(yǔ)法使用正斜杠(/pattern/)來(lái)包裝正則表達(dá)式模式,而構(gòu)造函數(shù)語(yǔ)法使用引號(hào)(“pattern”)。
在JavaScript中,正則表達(dá)式經(jīng)常使用的三個(gè)字符串方法:search(),replace()和match()。
search()方法使用表達(dá)式搜索匹配項(xiàng),然后返回匹配項(xiàng)的位置。
replace()方法返回修改后的字符串,其中將替換模式。
match()方法在字符串中搜索與正則表達(dá)式的匹配項(xiàng),然后將匹配項(xiàng)作為Array對(duì)象返回。
search()方法執(zhí)行搜索以查找正則表達(dá)式和字符串之間的匹配項(xiàng)。
如果找到匹配項(xiàng),它將返回第一個(gè)匹配項(xiàng)的位置,如果找不到匹配項(xiàng),則將返回-1:
var str = 'The question is to be, or not to be, that is to be.'; var pos = str.search('to be');測(cè)試看看?/?
以下示例演示了帶i
修飾符的正則表達(dá)式的使用(忽略大小寫(xiě)):
var str = 'The question is TO BE, or not to be, that is to be.'; var pos = str.search(/to be/i);測(cè)試看看?/?
正則表達(dá)式可以使您的搜索功能更加強(qiáng)大(例如,不區(qū)分大小寫(xiě))。
replace()方法返回一個(gè)新字符串,該字符串具有部分或全部模式匹配項(xiàng),并由替換項(xiàng)替換。
第一個(gè)參數(shù)將是要找到的值,第二個(gè)參數(shù)將是要替換為的值。
var str1 = 'The question is to be, or not to be, that is to be.'; var str2 = str1.replace('to be', 'ZZZ');測(cè)試看看?/?
默認(rèn)情況下,replace()方法僅替換第一個(gè)匹配項(xiàng)。
要替換所有出現(xiàn)的內(nèi)容,請(qǐng)使用帶有g
修飾符的正則表達(dá)式(全局搜索):
var str1 = 'The question is to be, or not to be, that is to be.'; var str2 = str1.replace(/to be/g, 'ZZZ');測(cè)試看看?/?
要替換不區(qū)分大小寫(xiě)的代碼,請(qǐng)使用帶有i
修飾符的正則表達(dá)式(忽略大小寫(xiě)):
var str1 = 'The question is TO BE, or not to be, that is to be.'; var str2 = str1.replace(/to be/gi, 'ZZZ');測(cè)試看看?/?
match()方法在字符串中搜索與正則表達(dá)式的匹配項(xiàng),然后將匹配項(xiàng)作為Array對(duì)象返回。
var str = 'POLLUTION: Air Pollution is introduction of chemicals to the atmosphere'; var reg = str.match(/ion/g);測(cè)試看看?/?
修飾符用于執(zhí)行全局搜索,區(qū)分大小寫(xiě)和多行搜索:
修飾符 | 描述 | 示例 |
---|---|---|
g | 執(zhí)行全局匹配,即查找所有匹配,而不是在第一個(gè)匹配后停止 | 測(cè)試一下 |
i | 執(zhí)行不區(qū)分大小寫(xiě)的匹配 | 測(cè)試一下 |
m | 執(zhí)行多行匹配 | 測(cè)試一下 |
正則表達(dá)式模式包括字母,數(shù)字,標(biāo)點(diǎn)符號(hào)等的使用,以及一組特殊的正則表達(dá)式字符。
方括號(hào)[]用于查找一系列字符:
表達(dá)式 | 描述 | 示例 |
---|---|---|
[abc] | 在方括號(hào)之間找到任何字符 | 測(cè)試一下 |
[0-9] | 查找方括號(hào)之間的任何字符(任意數(shù)字) | 測(cè)試一下 |
(x|y) | 查找指定的任何代替方案 | 測(cè)試一下 |
元字符是一個(gè)簡(jiǎn)單的字母字符,前面有一個(gè)反斜杠,它的作用是給這個(gè)組合一個(gè)特殊的意義:
元字符 | 描述 | 示例 |
---|---|---|
\d | 找一個(gè)數(shù)字 | 測(cè)試一下 |
\W | 查找非文字字符 | 測(cè)試一下 |
\s | 查找空格字符 | 測(cè)試一下 |
量詞指定頻率或方括號(hào)內(nèi)的字符序列的位置:
表達(dá)式 | 描述 | 示例 |
---|---|---|
z+ | 匹配任何包含至少一個(gè)z的字符串 | 測(cè)試一下 |
z* | 匹配任何包含零個(gè)或多個(gè)z的字符串 | 測(cè)試一下 |
z? | 匹配任何包含零或一出現(xiàn)z的字符串 | 測(cè)試一下 |
在JavaScript中,RegExp對(duì)象是具有預(yù)定義屬性和方法的正則表達(dá)式對(duì)象。
test()方法在字符串中搜索模式,并根據(jù)結(jié)果返回true或false。
exec()方法在字符串中搜索模式,然后將找到的文本作為對(duì)象返回。
test()方法執(zhí)行對(duì)指定字符串中的匹配項(xiàng)的搜索。
如果找到匹配項(xiàng),則返回true;否則,返回false。
使用test()時(shí),你想知道的模式是否在字符串中找到。
var str = "www.soo66.com"; var regex = new RegExp("h"); var ans = regex.test(str);測(cè)試看看?/?
將test()返回一個(gè)布爾值,不同的是exec()它返回一個(gè)字符串。
exec()方法執(zhí)行對(duì)指定字符串中的匹配項(xiàng)的搜索。
如果找到匹配項(xiàng),則此方法返回匹配的文本;否則,返回null。
var str = "www.soo66.com"; var regex = new RegExp("h"); var ans = regex.exec(str);測(cè)試看看?/?
計(jì)算字符串中的元音數(shù)量:
在輸入字段中輸入一些文本以顯示元音字母數(shù)量:
輸入的元音字母?jìng)€(gè)數(shù):
有關(guān)完整的屬性和方法參考,請(qǐng)?jiān)L問(wèn)我們的JavaScript RegExp參考。
參考部分包含所有RegExp屬性和方法的描述和示例。