正則表達(dá)式-javascript

前言

由于經(jīng)常被正則虐,看見(jiàn)就不知如何處理,已斷斷續(xù)續(xù)學(xué)習(xí)過(guò)一些,但是一段時(shí)間沒(méi)有接觸就連最基本的東西也忘了,原因就是不系統(tǒng),也沒(méi)有實(shí)戰(zhàn)?,F(xiàn)在把正則表達(dá)式整理一下,方便以后的學(xué)習(xí)和實(shí)踐中掌握。

正則表達(dá)式在線測(cè)試

1. 什么是正則表達(dá)式

正則表達(dá)式也叫做匹配模式(Pattern),它由一組具有特定含義的字符串組成,通常用于匹配和替換文本。

正則表達(dá)式是一個(gè)高效匹配檢測(cè)的東西,對(duì)于表單檢測(cè),高亮顯示搜索結(jié)果還是進(jìn)行URL的地址映射,一般都需要用到它。


2. ReqExp

這一塊是基于《javascript高級(jí)程序設(shè)計(jì)的第三版》整理部分。
ECMAScript是通過(guò)ReqExp類型來(lái)支持正則表達(dá)式

構(gòu)造正則表達(dá)式的方法
  • 以字面量的形式來(lái)定義(method1)
  • 使用ReqExp構(gòu)造函數(shù)(method2)
//pattern就是一個(gè)正則表達(dá)式。
//flags用于表達(dá)正則行為的標(biāo)志。

//以字面量的形式來(lái)定義
var expression = /pattern/flags; 
//構(gòu)造函數(shù)
var expression = new ReqExp("pattern","flags"); 

flags標(biāo)志 作用
g 全局模式,匹配將用于所有的字符串
i 匹配不區(qū)分大小寫
m 模式

元字符

在正則表達(dá)式中有一些特殊的字符符號(hào)我們是不能直接使用的,必須對(duì)其進(jìn)行轉(zhuǎn)義后才能使用。如“\”,因?yàn)檫@些字符在正則表達(dá)式中有特殊的語(yǔ)法含義,這類字符被稱為元字符,正則表達(dá)式中的元字符有:

([{\^$|)?*+.]}都屬于元字符

如果要在正則表達(dá)式中直接匹配這些元字符,需要對(duì)它們轉(zhuǎn)義。

  • 由于是直接字面量,所以轉(zhuǎn)義就ok了。(method1)
  • 參數(shù)都是字符串,所以涉及到雙重轉(zhuǎn)義。(method2)
等價(jià)關(guān)系
ReqExp的實(shí)例屬性
屬性名稱 說(shuō)明
global 表示是否設(shè)置了g標(biāo)志,返回boolean值
ignoreCase 表示是否設(shè)置了i標(biāo)志,返回boolean值
lastIndex 表示開(kāi)始搜索下一個(gè)匹配項(xiàng)的字符位置,從0開(kāi)始,返回的是整數(shù)。
multiline 表示是否設(shè)置了m標(biāo)志,返回boolean值
source "字面量"的形式返回正則表達(dá)式。

之前的這些屬性其實(shí)用于不大,就當(dāng)了解吧。

ReqExp實(shí)例方法---exec( )主力

exec(應(yīng)用模式的字符串 ),返回包含第一個(gè)匹配項(xiàng)信息的數(shù)組,但是這個(gè)數(shù)組有兩個(gè)額外的屬性indexinput。

  • index 表示匹配項(xiàng)在字符串中的位置。
  • input 表示應(yīng)用正則表達(dá)式的字符串。
  • 數(shù)組 第一項(xiàng)是與整個(gè)模式匹配的字符串,其他項(xiàng)是與模式中的捕獲組匹配的字符串。

注意:使用的exec()方法的時(shí)候設(shè)置和不設(shè)置g標(biāo)志是有區(qū)別的。

設(shè)置g 不設(shè)置g
每次調(diào)用exec( )都會(huì)在字符串中尋找新的匹配項(xiàng) 始終只是返回第一個(gè)匹配項(xiàng)的信息。

練練手

//eg1:
<script type="text/javascript">
    var text = "cat, bat, sat, fat";
    var pattern1 = /.at/;
    var matches = pattern1.exec(text);
    console.log(matches.index);
    console.log(matches[0]);
    console.log(pattern1.lastIndex);

    //還有一組返回的也是一樣的。
</script>
eg1的返回結(jié)果
//eg2:
    var pattern2 =  /.at/g;
    var matches = pattern2.exec(text);
    console.log(matches.index);
    console.log(matches[0]);
    console.log(pattern2.lastIndex);

    var matches = pattern2.exec(text);
    console.log(matches.index);
    console.log(matches[0]);
    console.log(pattern2.lastIndex);
eg2返回的結(jié)果

很明顯可以看到兩者的差別。

IE的javascript實(shí)現(xiàn)在lastIndex屬性上存在偏差,即使在非全局模式下,lastIndex屬性每次也會(huì)變化。


test( 字符串)

  • 模式與該參數(shù)匹配返回true
  • 不匹配就返回false

基于此,test( )一般是用在if語(yǔ)句中的。

    var text = "000-00-0000"
    var pattern = /\d{3}-\d{2}-\d{4}/;
    if(pattern.test(text)){
        console.log("matched");
//很明顯會(huì)在chorme的控制臺(tái)console中輸出matched

繼承的方法

方法 返回
toLocaleString( ) /toString() 返回匹配正則表達(dá)式的字面量。
valueOf( ) 返回正則表達(dá)式本身
//eg3:
    var pattern = new RegExp("\\[bc\\]at","g");
    console.log(pattern.toLocaleString());
    console.log(pattern.toString());
    console.log(pattern.valueOf());
eg3返回的結(jié)果

以上就把正則在javascript中的大致整理了下,下面就主要整理正則表達(dá)式中的(pattern)寫法以及常用元字符的功能。


3. 元字符整理

元字符(常用) 說(shuō)明
. 匹配除了換行符以外的任意字符
\w 匹配字母或數(shù)字或下劃線或漢字
\s 匹配任意的空白符
\d == [0-9] 匹配數(shù)字
\b 匹配單詞的開(kāi)始或結(jié)束
^ 匹配字符串的開(kāi)始
$ 匹配字符串的結(jié)束
元字符(重復(fù)) 說(shuō)明
* 重復(fù)0次或更多次
+ 重復(fù)一次或更多次
? 重復(fù)零次或一次
{n} 重復(fù)n次
{n,} 重復(fù)n次或更多次
{n, m} 重復(fù)n到m次
//寫一個(gè)正則可以匹配谷歌的三種網(wǎng)址
var gogle = "www.gogle.com";
var google = "www.google.com";
var gooogle = "www.gooogle.com";
var pattern = /w{3}\.go{1,3}gle\.com/i; ok
元字符() 說(shuō)明
() 分組
markdown制作表格的豎 表示分枝
[ ] 表示選擇里面的任意一個(gè)
(\d{1,3}\.){3}\d{1,3} 簡(jiǎn)單的ip匹配,但是大于255也可以匹配到;
改進(jìn):
((2[0-4])\d | 25[0-5] | [01]\d\d)\. ){3}(2[0-4])\d | 25[0-5] | [01]\d\d)
| 表示的分枝
元字符(反義) 說(shuō)明
\W == [0-9A-Za-z_漢字] 匹配任意不是字母,數(shù)字,下劃線,漢子的字符
\S 匹配任意不是空白符的字符
\D == [^0-9] 匹配任意的非數(shù)字的字符
\B 匹配不是單詞開(kāi)頭或者結(jié)尾的位置
^x 匹配除了x意外的任意字符
[^aeiou] 匹配除了aeiou這幾個(gè)字母意外的任意字符

到此打住,關(guān)于后向引用,零寬斷言,負(fù)向零寬斷言,貪婪與懶惰先不整理。


參考


實(shí)戰(zhàn)區(qū)域

會(huì)不定期的整理實(shí)戰(zhàn)在這個(gè)部分。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容