「JavaScript 從入門(mén)到精通」1.語(yǔ)法和數(shù)據(jù)類(lèi)型
「JavaScript 從入門(mén)到精通」2.流程控制和錯(cuò)誤處理
「JavaScript 從入門(mén)到精通」3.循環(huán)和迭代
「JavaScript 從入門(mén)到精通」4.函數(shù)
「JavaScript 從入門(mén)到精通」5.表達(dá)式和運(yùn)算符
「JavaScript 從入門(mén)到精通」6.數(shù)字
「JavaScript 從入門(mén)到精通」7.時(shí)間對(duì)象
JS中的正則表達(dá)式是用來(lái)匹配字符串中指定字符組合的模式。
另外需要記住:正則表達(dá)式也是對(duì)象。
正則表達(dá)式的返回值,是一個(gè)新的RegExp對(duì)象,具有指定的模式和標(biāo)志。
返回信息介紹:
關(guān)于正則表達(dá)式的一些方法屬性,文章后面介紹,這里先復(fù)習(xí)定義和使用。
JS的正則表達(dá)式可以被用于:
2.1 RegExp對(duì)象方法
str: 需要檢索的字符串。
若檢索成功,返回匹配的數(shù)組,否則返回null。
返回信息介紹:
str:需要檢索的字符串。
若匹配成功返回true否則false。
等價(jià)于 reg.exec(str) !=null。
^str表示匹配以str開(kāi)頭的字符串,這些符號(hào)文章后面會(huì)介紹。
2.2 String對(duì)象方法
str.search(reg):
str:被檢索的源字符串。
reg:可以是需要檢索的字符串,也可以是需要檢索的RegExp對(duì)象,可以添加標(biāo)志,如i。
若檢索成功,返回第一個(gè)與RegExp對(duì)象匹配的字符串的起始位置,否則返回-1。
str.match(reg):
str:被檢索的源字符串。
reg:可以是需要檢索的字符串,也可以是需要檢索的RegExp對(duì)象,可以添加標(biāo)志,如i。
若檢索成功,返回與reg匹配的所有結(jié)果的一個(gè)數(shù)組,數(shù)組的第一項(xiàng)是進(jìn)行匹配完整的字符串,之后的項(xiàng)是用圓括號(hào)捕獲的結(jié)果,否則返回null。
'see Chapter 3.4.5.1' 是整個(gè)匹配。
'Chapter 3.4.5.1' 被'(chapter \d+(\.\d)*)'捕獲。
'.1' 是被'(\.\d)'捕獲的最后一個(gè)值。
'index' 屬性(22)是整個(gè)匹配從零開(kāi)始的索引。
'input' 屬性是被解析的原始字符串。
將字符串中指定字符替換成其他字符,或替換成一個(gè)與正則表達(dá)式匹配的字符串。
str.replace(sub/reg,val):
val可以使用特殊變量名:
將一個(gè)字符串,按照指定符號(hào)分割成一個(gè)字符串?dāng)?shù)組。
str.split(sub[, maxlength]):
2.3 使用情況
詳細(xì)的每個(gè)符號(hào)的用法,可以查閱 W3school JavaScript RegExp 對(duì)象
3.1 修飾符
修飾符描述i執(zhí)行對(duì)大小寫(xiě)不敏感的匹配。g執(zhí)行全局匹配(查找所有匹配而非在找到第一個(gè)匹配后停止)。m執(zhí)行多行匹配。
3.2 方括號(hào)
用于查找指定返回之內(nèi)的字符:
.3 元字符
元字符是擁有特殊含義的字符:
3.4 量詞
4.1 介紹
在ES5中有兩種情況。
ES6中使用:
第一個(gè)參數(shù)是正則對(duì)象,第二個(gè)是指定修飾符,如果第一個(gè)參數(shù)已經(jīng)有修飾符,則會(huì)被第二個(gè)參數(shù)覆蓋。
new RegExp(/abc/ig, 'i');
4.2 字符串的正則方法
常用的四種方法:match()、replace()、search()和split()。
4.3 u修飾符
添加u修飾符,是為了處理大于uFFFF的Unicode字符,即正確處理四個(gè)字節(jié)的UTF-16編碼。
/^\uD83D/u.test('\uD83D\uDC2A'); // false /^\uD83D/.test('\uD83D\uDC2A'); // true
由于ES5之前不支持四個(gè)字節(jié)UTF-16編碼,會(huì)識(shí)別為兩個(gè)字符,導(dǎo)致第二行輸出true,加入u修飾符后ES6就會(huì)識(shí)別為一個(gè)字符,所以輸出false。
注意:
加上u修飾符后,會(huì)改變下面正則表達(dá)式的行為:
var a=""; /^.$/.test(a); // false /^.$/u.test(a); // true
/\u{61}/.test('a'); // false /\u{61}/u.test('a'); // true /\u{20BB7}/u.test(''); // true
/a{2}/.test('aa'); // true /a{2}/u.test('aa'); // true /{2}/.test(''); // false /{2}/u.test(''); // true
/[a-z]/i.test('\u212A') // false /[a-z]/iu.test('\u212A') // true
檢查是否設(shè)置u修飾符: 使用unicode屬性。
const a=/hello/; const b=/hello/u; a.unicode // false b.unicode // true
4.4 y修飾符
y修飾符與g修飾符類(lèi)似,也是全局匹配,后一次匹配都是從上一次匹配成功的下一個(gè)位置開(kāi)始。區(qū)別在于,g修飾符只要剩余位置中存在匹配即可,而y修飾符是必須從剩余第一個(gè)開(kāi)始。
lastIndex屬性: 指定匹配的開(kāi)始位置:
返回多個(gè)匹配:
一個(gè)y修飾符對(duì)match方法只能返回第一個(gè)匹配,與g修飾符搭配能返回所有匹配。
'a1a2a3'.match(/a\d/y); // ["a1"] 'a1a2a3'.match(/a\d/gy); // ["a1", "a2", "a3"]
檢查是否使用y修飾符:
使用sticky屬性檢查。
const a=/hello\d/y; a.sticky; // true
4.5 flags屬性
flags屬性返回所有正則表達(dá)式的修飾符。
/abc/ig.flags; // 'gi'
在正則表達(dá)式中,點(diǎn)(.)可以表示任意單個(gè)字符,除了兩個(gè):用u修飾符解決四個(gè)字節(jié)的UTF-16字符,另一個(gè)是行終止符。
終止符即表示一行的結(jié)束,如下四個(gè)字符屬于“行終止符”:
/foo.bar/.test('foo\nbar') // false
上面代碼中,因?yàn)?不匹配\n,所以正則表達(dá)式返回false。
換個(gè)醒,可以匹配任意單個(gè)字符:
/foo[^]bar/.test('foo\nbar') // true
ES9引入s修飾符,使得.可以匹配任意單個(gè)字符:
/foo.bar/s.test('foo\nbar') // true
這被稱(chēng)為dotAll模式,即點(diǎn)(dot)代表一切字符。所以,正則表達(dá)式還引入了一個(gè)dotAll屬性,返回一個(gè)布爾值,表示該正則表達(dá)式是否處在dotAll模式。
const re=/foo.bar/s; // 另一種寫(xiě)法 // const re=new RegExp('foo.bar', 's'); re.test('foo\nbar') // true re.dotAll // true re.flags // 's'
/s修飾符和多行修飾符/m不沖突,兩者一起使用的情況下,.匹配所有字符,而^和$匹配每一行的行首和行尾。
公眾號(hào):前端自習(xí)課
則表達(dá)式在js中有很多用途,最常見(jiàn)的是在表單驗(yàn)證中,驗(yàn)證一些字符串是否符合要求,如email、手機(jī)號(hào)等等,學(xué)好正則對(duì)于前端工程師來(lái)說(shuō)是一個(gè)不錯(cuò)的輔助技能。
圖片來(lái)自網(wǎng)絡(luò)
一、特殊字符
1、$
正則的結(jié)尾符號(hào)
2、^
開(kāi)始符號(hào)
3、()
標(biāo)記一個(gè)子表達(dá)式的開(kāi)始和結(jié)束位置
4、[]
匹配括號(hào)中任意一個(gè); 例:
結(jié)果就是true
5、{}
括號(hào)里是匹配幾個(gè),一般用來(lái)限制位數(shù);例:
匹配位數(shù)是4~7位,7個(gè)a返回true,8個(gè)就false;
有三種用法:
{3}:表示匹配三位;
{3,}:表示匹配三位及以上;
{3,7}:表示匹配3到7位
6、*
表示匹配0次或多次;相當(dāng)于{0,}
7、?
表示要匹配的是0或1位;
8、+
表示匹配前面的字符串一次或多次
9、.
匹配任意字符
10、|
“或”:不解釋
11、\w
字母、數(shù)字、下劃線
12、\W
非字母、數(shù)字、下劃線
13、\d
數(shù)字,等價(jià)于[0-9]
14、\D
非數(shù)字,等價(jià)于[^0-9]
15、\s
匹配空格
二、js方法
1、match方法:
挑選相匹配的內(nèi)容:例:
結(jié)果是“1,2,3”
2.test方法:
返回一個(gè)布爾值,表示是否匹配
上述結(jié)果是“true”
3、replace方法:
用于將匹配正則的字符串進(jìn)行替換,例:
前面//里面是被替換的內(nèi)容,后面加的字符串是要替換的內(nèi)容。
例:var path=req.url.replace(/\/?(?:\?.*)?$/,'').toLowerCase();
獲取“/”后邊的路徑。
avaScript正則表達(dá)式的深度解析與應(yīng)用
**一、正則表達(dá)式的魅力**
正則表達(dá)式,簡(jiǎn)稱(chēng)Regex,是一種強(qiáng)大的字符串處理工具,它能幫助我們快速、準(zhǔn)確地匹配、查找、替換復(fù)雜的字符串模式。在JavaScript中,正則表達(dá)式被賦予了更高的地位,它不僅僅是一個(gè)工具,更是一種編程思維。
正則表達(dá)式的主要應(yīng)用場(chǎng)景包括但不限于:表單驗(yàn)證、文本內(nèi)容過(guò)濾、敏感詞替換、字符串的特定部分提取等。
**二、正則表達(dá)式的創(chuàng)建與使用**
在JavaScript中,創(chuàng)建正則表達(dá)式有兩種方式:
1. **通過(guò)RegExp構(gòu)造函數(shù)**:`var regex=new RegExp('pattern');`
2. **通過(guò)字面量方式**:`var regex=/pattern/;`
一旦創(chuàng)建了正則表達(dá)式,就可以使用其提供的`test()`方法來(lái)檢測(cè)字符串是否符合該正則表達(dá)式的規(guī)則。
**三、正則表達(dá)式的核心元素**
正則表達(dá)式的強(qiáng)大之處在于其包含的各種特殊字符和元字符,它們賦予了正則表達(dá)式豐富的匹配能力。
1. **邊界符**:`^` 和 `$` 分別表示字符串的開(kāi)始和結(jié)束。
2. **字符類(lèi)**:`[]` 用于定義一組可選的字符,如`[abc]`表示匹配`a`、`b`或`c`中的任何一個(gè)字符。
3. **量詞符**:如`*`、`+`、`?`、`{n}`、`{n,}`和`{n,m}`,它們用于指定字符或字符組出現(xiàn)的次數(shù)。
4. **預(yù)定義類(lèi)**:如`\d`、`\D`、`\w`、`\W`、`\s`和`\S`,它們提供了對(duì)常見(jiàn)字符模式的快速匹配。
**四、正則表達(dá)式的替換功能**
正則表達(dá)式的另一個(gè)強(qiáng)大功能是替換。使用`replace()`方法,可以基于正則表達(dá)式匹配到的內(nèi)容,將字符串中的特定部分替換為其他內(nèi)容。
`replace()`方法接受兩個(gè)參數(shù):第一個(gè)參數(shù)是要被替換的模式(可以是字符串或正則表達(dá)式),第二個(gè)參數(shù)是替換后的內(nèi)容。
**五、正則表達(dá)式的修飾符**
正則表達(dá)式還支持一些修飾符,它們可以改變匹配的行為:
* `g`:全局匹配,即匹配整個(gè)字符串中的所有符合條件的內(nèi)容,而不僅僅是第一個(gè)。
* `i`:忽略大小寫(xiě),即在匹配時(shí)忽略字符的大小寫(xiě)。
結(jié)合使用這兩個(gè)修飾符,如`gi`,可以實(shí)現(xiàn)全局且不區(qū)分大小寫(xiě)的匹配。
**六、總結(jié)**
正則表達(dá)式是JavaScript中一個(gè)非常強(qiáng)大的工具,它可以幫助我們高效地處理字符串,實(shí)現(xiàn)復(fù)雜的匹配、查找和替換操作。掌握正則表達(dá)式的核心概念和用法,對(duì)于提升JavaScript編程能力具有非常重要的意義。
*請(qǐng)認(rèn)真填寫(xiě)需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。