javaScript RegExp 正則表達式的使用

首先,正則表達式 這個東西是幹嗎用的?正則表達式

-好比我要判斷用戶輸入的郵箱是否合法,或者咱們想提取字符串裏的某個特定字符,那麼咱們就能夠用正則表達式來解決這些問題了。數組

正則表達式是一種描述性的語言來給字符串定義一個規則,凡是符合規則的字符串就是匹配了,不然該字符串不合法。ruby

匹配規則:jsp

\d 匹配一個數字,如 '0a\d'可匹配‘0a8’,不能匹配‘0aa’;  '\d\d'可匹配'66';spa

\w 匹配一個字母或者數字,如'0a\w'既可匹配'0a8',還可匹配‘0aa’;  '\w\w\w'可匹配'11a','aaa' ;code

. 匹配任意字符,如'wh.'可匹配'whd','whx','wh!','wh8'等等;對象

* 匹配任意個字符(包括0個);blog

+ 匹配至少1個字符索引

匹配0或者1個字符ip

-  i忽略大小寫匹配

-  m多行匹配

\s 匹配一個空格(包括Tab等空白符)

{n}匹配n個字符,'\d{4}'匹配4個數字,好比'0755'

{n,m}匹配n-m個字符,'\d{3,8}'可匹配3-8個數字,如'1234','123','12345678' ; 

[] 表示範圍匹配,這樣能夠作到更精準匹配,[0-9a-zA-Z\_]+能夠匹配至少由一個數字、字母或者下劃線組成的字符串,好比'a9f','a_0','2017';

A|B 能夠匹配A或B,因此'(J|j)s'能夠匹配'Js'和'js' ;

^表示行的開頭,'^\d'表示以數字開頭;

$表示行結束,'\d$'表示以數字結束;js能夠匹配'jsp',加上'^js$'後只能匹配'js'了;

()表示分組;

 

JavaScript正則表達式建立的方式有兩種:

第一種是經過 /正則表達式/ 形式寫出來, 第二種是經過new RegExp('正則表達式')。兩種方式是同樣的:

var re1 = /whd\88188/;

var re2 = new RegExp('whd\\88188');  //注意這種方法須要轉義,兩個\\實際上是一個\

re1; // /whd|88188/

re2; // /whd|88188/

 

一、如何判斷正則表達式是否匹配:

var re = /^\d{4}\-\d{3-8}$/;

re.test('0755-88188'); //true

re.test('075-88188'); //false

re.test('0755-88188whd'); //false

RegExp對象的test()方法用於檢測字符串是否符合條件。

 

二、如何切割字符串

split()方法用於切割字符串,切割例子以下:

'w h d'.split(''); //['w','','h','','d']

發現沒有,沒法識別空格,來,加點正則表達式

'w h d'.split(/\s+/);  //['w','h','d']

加上,;試試

'w,h;; d'.split(/[\s\,\;]+/); //['w','h','d']

 能夠用split()方法把不規範地輸入轉化爲規範地輸入。

 

3,如何提取子串

用exec()方法提取子串,如咱們要提取區號和本地號碼

var re = /^(\d{4})-(\d{3,8})$/;
re.exec('0755-123456'); // ['0755-123456', '0755', '123456']
re.exec('0755 123456'); // null

exec()方法匹配成功後,回返回一個數組,第一個元素是正則表達式匹配到的整個字符串,後面是匹配成功的子串。

 

四、貪婪匹配

正則表大式默認貪婪匹配,它會匹配儘量多的字符,舉個栗子,要匹配出數字後面全部的0

var re = /^(\d+)(0*)$/;
re.exec('1023000');  //["1023000","1023000",""]

由於 \d+採用的是貪婪匹配,把'1023000'全部的數字都匹配了,結果0*匹配了空字符串,如今要不匹配全部數字,就得讓\d+變成非貪婪匹配,加?能實現

var re = /^(\d+?)(0*)$/;
re.exec('1023000');  //["1023000","1023","000"]


五、全局搜索

g表示全局匹配

var re1 = /whd88188/g ; 

var re2 = new RegExp('whd88188','g');

這兩種表達方式是等價的

全局匹配能夠用exec()方法來搜索一個匹配的字符串,指定g標誌後,每次運行exec(),正則表達式自己會更新lastIndex屬性,表示上次匹配到的最後索引,

var s = 'JavaScript, VBScript, JScript and ECMAScript';
var re=/[a-zA-Z]+Script/g;

// 使用全局匹配:
re.exec(s); // ['JavaScript']
re.lastIndex; // 10

re.exec(s); // ['VBScript']
re.lastIndex; // 20

re.exec(s); // ['JScript']
re.lastIndex; // 29

re.exec(s); // ['ECMAScript']
re.lastIndex; // 44

re.exec(s); // null,直到結束仍沒有匹配到

 

遇到常常過來回顧回顧……嗯,雖然是這樣說……本身都要相信本身了

相關文章
相關標籤/搜索