js正則表示式及語法
阿新 • • 發佈:2021-01-13
技術標籤:jsjavascript
正則 :
正則表示式(regular expression)描述了一種字串匹配的模式(pattern),
可以用來檢查一個串是否含有某種子串、將匹配的子串替換或者從某個串中取出符合某個條件的子串等。
1.定義正則表示式:
a.普通方式:var reg=/表示式/附加引數
附件引數:
g:代表可以進行全域性匹配。
i:代表不區分大小寫匹配。
m:代表可以進行多行匹配。
例子:
var reg=/a*b/;
var reg=/abc+f/g;
b.建構函式方式:var reg=new RegExp(“表示式”,”附加引數”);
例子:
var reg=new RegExp(“a*b”);
var reg=new RegExp(“abc+f”,”g”);
兩者區別:
a.普通方式中的表示式必須是一個常量字串,而建構函式中的表示式可以是常量字串,
也可以是一個js變數,例如根據使用者的輸入來作為表示式引數等等:
var reg=new RegExp(document.forms[0].exprfiled.value,”g”);
b.安卓端正常,IOS端會不零寬斷言,會有如下報錯:
//Invalid regular expression: invalid group specifier name
常用零寬斷言:? <=、?<!、?!、?=
c.ios端有些環境不支援 / / 表示式的正則,但是都支援 new RegExp()建構函式
表示式物件(RegExp)方法:
1.exec(str),返回str中與表示式相匹配的第一個字串,而且以陣列的形式表現,
當然如果表示式中含有捕捉用的小括號,則返回的陣列中也可能含有()中的匹配字串,例如:
var regx=/\d+/;
var rs=regx.exec(“3432ddf53”);
返回的rs值為:[3432]
2.test(str),判斷字串str是否匹配表示式,返回一個布林值。例如:
var regx=/user/d+/g;
var flag=regx.test(“user12dd”);
flag的值為true。
字串String 物件方法:
1.match(expr),返回與expr相匹配的一個字串陣列,如果沒有加引數g,
則返回第一個匹配,加入引數g則返回所有的匹配
例子:
var regx=/user\d/g;
var str=“user13userddduser345”;
var rs=str.match(regx);
rs的值為:[user1,user3]
2.search(expr),返回字串中與expr相匹配的第一個匹配的index值。
沒有匹配項時,返回-1,search() 方法不執行全域性匹配,它將忽略標誌 g
例子:
var regx=/user\d/;
var str=“user13userddduser345”;
var rs=str.search(regx);
rs的值為:0
3.replace(expr,str),將字串中匹配expr的部分替換為str。
另外在replace方法中,str中可以含有一種變數符號$,格式為$n,
代表匹配中被記住的第n的匹配字串(注意小括號可以記憶匹配)。
進行全域性替換(此時表示式必須附加引數g,否則也只是替換第一個匹配)
例子:
var regx=/user\d/g;
var str=“user13userddduser345”;
var rs=str.replace(regx,”00”);
rs的值為:003userddd0045
例子2:
var regx=/u(se)r\d/g;
var str=“user13userddduser345”;
var rs=str.replace(regx,”$1”);
rs的值為:se3userdddse45
字元組:
\b:代表著單詞的開頭或結尾,作為單詞的分界處。
\d就是[0-9]。表示是一位數字。
\D就是[^0-9]。表示除數字外的任意字元。
\w就是[0-9a-zA-Z_]。表示數字、大小寫字母和下劃線。
\W是[^0-9a-zA-Z_]。非單詞字元。
\s是[ \t\v\n\r\f]。表示空白符,包括空格、水平製表符、垂直製表符、換行符、回車符、換頁符。
\S是[^ \t\v\n\r\f]。 非空白符。
[]的使用: //很多元字元在字元組內都變成了普通字元
[abcdef] 這個正則表示式匹配abcdef中其中一個字母,
[.?!]這個正則表示式匹配裡面三個標點符號中的其中一個。
[0-9]匹配0到9這段區間中任意一個數字(包括0和9)。
[a-z]這裡就是匹配a到z這段區間其中一個字母
[0-9a-zA-Z]就是匹配 0到9、a到z、A到Z 這三個區間的其中一個區間的其中一個字元或數字
[\s*]表示空格或者*號。
[^0-9]表示除數字外的任意字元。
量詞:
{m,} 表示至少出現m次。
{m} 等價於{m,m},表示出現m次。
? 等價於{0,1},表示出現或者不出現。記憶方式:問號的意思表示,有嗎?
//eg:a\d? 匹配的是以字元a開頭的,後面跟著0個或一個數字的字串:a、a5、a9
+ 等價於{1,},表示出現至少一次。記憶方式:加號是追加的意思,得先有一個,然後才考慮追加。
* 等價於{0,},表示出現任意次,有可能不出現。
*
分支
(p1|p2|p3),其中p1、p2和p3是子模式,用|(管道符)分隔,表示其中任何之一
//eg:020-88888888 (020)88888888。要讓讓這兩種形式的寫法都可以匹配,我們就要寫兩種形式的正則表示式
//匹配020-88888888 的正則表示式可以寫為:0\d{2}-\d{8};
//匹配(020)88888888的正則表示式我們可以寫成:(0\d{2})\d{8}。
//如果要使這兩個正則表示式一起匹配一個字串,
//那麼就要用到“或”符號來連線他們了:0\d{2}-\d{8}|(0\d{2})\d{8} 。