国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

正則表達式入門

ThinkSNS / 1816人閱讀

摘要:一幾個概念正則表達式正則表達式是描述一組字符串特征的模式,用來匹配特定的字符串。捕獲分組非捕獲分組正則表達式中通常用括號分組內容來表示一個捕獲分組,以便后續對其引用,它通常和后向引用相聯系。

寫在前面

正則真是個偉大的發明啊。分分鐘提高工作效率,
以前刪除某個文件夾下面的文件(Mac):

command + A  && command + delete

現在只需在命令行下

rm -rf *

而且如果你要刪除的文件有規律的話,

// 刪除開頭為"2017-11-"的所有文件
rm -rf 2017-11-*
// 刪除.txt文件 
rm -rf *.txt

簡直是進入現代化啊。總而言之,學好正則非常必要啊。
本文的代碼使用JavaScript書寫。javascript 對正則的實現基于RegExp對象。其說明文檔在(MDN-RegExp介紹),可以了解下。

一、幾個概念

正則表達式

正則表達式是描述一組字符串特征的模式,用來匹配特定的字符串。——Ken Thompson

字符串字面值 原生的字符串,沒有添加正則元素在里面,看到什么就是什么。比如Hello world 這個就是一個字面值。

元字符 在正則表達式中有特殊含義的字符,是正則表達式保留字。比如*+?[]

字符組 用于匹配字符的集合,通常置于[]內,如[0-9][a-z]

字符組簡寫式
如其名字所說,是字符組的簡寫形式。如d匹配數字,相當于[0-9],使用簡寫式可以使表達式更精煉。

捕獲分組vs非捕獲分組 正則表達式中通常用括號(分組內容)來表示一個捕獲分組,以便后續對其引用,它通常和 后向引用 相聯系。與之相對的是非捕獲分組(?:分組內容) 。因為非捕獲分組不會存儲到內存中,通常性能會好于捕獲分組。如:(abc)#1可以匹配abc#abc,這里1引用了前面的(abc),非捕獲分組表示abc 則可以寫成(?:abc)

量詞 量詞用于描述某個模式出現的個數。

* 用于表示0個或多個
?表示0個或1個
+ 表示1個或多個
{n} 表示出現n個

邊界 用來標記字符串中的位置,如^
$ 分別用于匹配行的起始和結束位置。用于標記單詞的邊界.

二、簡單的模式匹配
2.1 匹配字符串字面量
var hw = /hello world/;
hw.test("hello world");// true
2.2 匹配數字和非數字

對于單個數字,我們可以用[0-9],也可以用d,當然也可以用[0123456789],根據具體需要我們也可以選擇部分數字進行匹配[12],這只會匹配1和2。

// 匹配0-9的數字
var reg1 = /[0-9]/;
// 簡寫形式
var reg2 = /d/;

reg1.test("5");
reg2.test("5");

舉個例子,我們可以用數字匹配來驗證年份。

// 匹配1000 ~ 2999
var yearReg = /^[1-2]ffffd$/;
yearReg.test("1970");
yearReg.test("2999");

d相反的是D用于匹配非數字字符,它相當于[^d]

2.3 匹配單詞和非單詞字符

w 用于匹配單詞字符,何謂單詞字符,其實就相當于[_a-zA-Z0-9],既數字、字母、和下劃線。
同樣它的相反是W,大寫的W

2.4 匹配空白符

s用于匹配空白符,它相當于[ ],既空格、制表符( )、換行符( )、回車符( )。
這個應用就挺大了,比如利用replace()可以把文本中的空白符去掉。

var sReg = /s/;
var text = "wor ld";
// 刪除空白字符
text.replace(sReg, "");//world
2.5 匹配任意字符

.用于匹配任意字符。結合量詞我們可以用來匹配字符長度。

var reg = /^.{4}$/;
reg.test("-R3s");
reg.test("hello");
三、選擇、分組和引用
3.1 選擇

選擇操作可以在多個子模式中選擇一種,(html|HTML)可以匹配html也可以匹配HTML,

var reg = /<(html|HTML)>/;
reg.test("");//true
reg.test("");//true
3.2 捕獲分組和后向引用

前面提到過,()表示一個捕獲分組,括號代表一個分組的開始,從左到右分別1、2、3……,引用的時候就可以用12來引用了。

// 這里1表示前面的(html|HTML)
var reg = /<(html|HTML)>.*/;
reg.test("");//true
reg.test("");//true
3.3 非捕獲分組

有時候我們的分組并不需要后面引用,這時候可以使用非捕獲分組來提升性能。

// 判斷廣東省廣州市的電話號碼
var reg = /^(?:020)-d{8}$/;
reg.test("020-88886666");//true

// 判斷151或127開頭的手機號
var reg2 = /^(?:151|127)d{8}$/;
reg2.test("15166668888");//true
四、匹配Unicode字符

uXXXX 或者xxx用于匹配Unicode 字符,
"京"的Unicode編碼為u4eac
那么我們可以嘗試匹配一下北京的車牌號:

var reg = /^u4eac[A-Z][0-9_A-Z]{5}$/;
reg.test("京AF2345");//true
五、結語

正則表達式是相當強大的工具,這篇文章只能算是自己入門的一個簡單的總結。還有許多特性等待在實踐中發掘。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/89728.html

相關文章

  • ES6入門正則的擴展

    摘要:正則的擴展參數為字符串,那么第二個參數表示正則表達式的修飾符,如下等價于參數為一個正則表達式,這時返回一個原有正則表達式的拷貝。如下調用調用調用調用修飾符對正則表達式添加了修飾符,用來正確處理大于的字符。 showImg(https://segmentfault.com/img/bVbrJqm?w=800&h=1200); 1. 正則的擴展 參數為字符串, 那么第二個參數表示正則表達式...

    jifei 評論0 收藏0
  • 正則達式入門實踐(一)

    摘要:一前言正則表達式入門實踐系列文章適合熟悉至少使用過正則表達式的同學,在文章開始的時候我們都會帶著問題去思考如何正確應用正則表達式解決出現的問題,在解決問題的過程中增長你的知識,提高你的實踐能力。 一 前言 正則表達式入門實踐系列文章適合熟悉至少使用過正則表達式的同學,在文章開始的時候我們都會帶著問題去思考如何正確應用正則表達式解決出現的問題,在解決問題的過程中增長你的知識,提高你的實踐...

    chanthuang 評論0 收藏0
  • 爬蟲入門到精通-網頁的解析(正則

    摘要:本文章屬于爬蟲入門到精通系統教程第五講在爬蟲入門到精通第四講中,我們了解了如何下載網頁,這一節就是如何從下載的網頁中獲取我們想要的內容萬能匹配文章的標題文字我們要獲取的如上所示,假如我們要獲取文章的標題這幾個文字,那么我們應該怎么做呢我 本文章屬于爬蟲入門到精通系統教程第五講 在爬蟲入門到精通第四講中,我們了解了如何下載網頁,這一節就是如何從下載的網頁中獲取我們想要的內容 萬能匹配 h...

    RiverLi 評論0 收藏0
  • 前端計劃——JavaScript正則達式快速入門

    摘要:前言正則表達式時處理字符串中常用的手法,本文以簡單的方式,快速展示了中正則相關的基礎知識點。文末還提供了幾個簡單的正則相關面試題。接下來是正則部分,注意后面的并不匹配,也就是比如,實際匹配的值是和,在和后面加上,就完成了預期。 前言:正則表達式時處理字符串中常用的手法,本文以簡單的方式,快速展示了JavaScript中正則相關的基礎知識點。文末還提供了幾個簡單的正則相關面試題。個人總結...

    Xufc 評論0 收藏0
  • 正則達式快速入門

    摘要:如這個表達式能匹配兩種以連字號分隔的電話號碼一種是三位區號,位本地號如,一種是位區號,位本地號。有時我們要匹配的字符串可能包含正則表達式語法提供的一些元字符,這時我們就要用到字符轉義例如匹配,匹配。 找了很多正則表達式的教程,始終沒有滿意的,要不就是直接給出一張元字符的表,要不就是給出各種常用的表達式,直到我看到這篇http://deerchao.net/tutorials/regex...

    BearyChat 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<