有兩種方法例項化regexp物件:
修飾符
g:global全文搜尋,不新增,搜尋到第乙個匹配停止
i:ignore case忽略大小寫,預設大小寫敏感
m:multiple lines多行搜尋
元字元正規表示式由兩種基本字元型別組成: -原義文字字元 -元字元
元字元是在正規表示式中有特殊含義的非字母字元,如下幾種符號類的: . * + ? $ ^ | \ () {}
元字元的含義不是唯一的,在不同場景下,含義會有不同
字元類我們可以使用元字元來構建乙個簡單的類
所謂的類是指符合某些特性的物件,乙個泛指,而不是特指某個字元
表示式[abc]把字元a或b或c歸為一類,表示式可以匹配這樣的字元
字元類取反
表示式[^abc] 表示不是字元a或b或c的內容
範圍類我們可以使用[a-z]來連線兩個字元表示從a到z的任意字元
預定義類
字元等價類含義
.[^\r\n]
除了回車符和換行符之外的所有字元
\d[0-9]
數字字元
\d[^0-9]
非數字字元
\s[\t\n\x0b\f\r]
空白符\s
[^\t\n\x0b\f\r]
非空白符
\w[a-za-z_0-9]
單詞字元(字母、數字、下劃線_)
\w[^a-za-z_0-9]
非單詞字元 邊界
字元含義^
以***開始
$以***結束
\b單詞邊界
\b非單詞邊界
示例:'this is boy'.replace(/\bis\b/g, 0); 結果:this 0 boy
'this is boy'.replace(/\bis\b/g, 0); 結果 th0 is boy 量詞
字元含義?
出現0次或1次(最多出現1次)
+出現一次或多次(至少出現一次)
*出現0次或多次(任意次)
出現n次
出現n至m次
至少出現n次
貪婪模式
'12345678'.replace(/\d/g,'x') ==>結果x78
貪婪模式會盡可能多的匹配,知道匹配失敗
非貪婪模式
'12345678'.replace(/\d?/g,'x') 在量詞後面加乙個? ==>結果xx78
匹配到123替換為x,又匹配到456替換為x 分組
用()可以達到分組的功能,使量詞作用於分組 或
用 | 可以達到或的效果
反向引用
'2015-12-24'.replace(/(\d)-(\d)-(\d)/g,'$2/$3/$1') ==>結果12/24/2015
$1是指第乙個分組,也就是第乙個()
忽略分組
不希望捕獲某些分組,只需在分組內加上?:就可以
$1是指第乙個分組,也就是第乙個()
前瞻正向前瞻?= , 負向前瞻?!
正則物件屬性
global:是否全文搜尋,預設false
ignore case:是否大小寫敏感,預設false
multiline:多行搜尋,預設值是false
source:正規表示式的文字字串
示例:var reg1 = /\w/; var reg2 = /\w/gim;
reg1.global 輸出 false;
reg2.ignorecase 輸出true
reg1.source 輸出「\w」
reg2.source輸出「\w」
注意:不能對他們進行賦值,如:reg1.global = true是不生效的
正規表示式物件方法:test方法和exec方法
test(str)引數是字串,用於測試字串引數中是否存在匹配正規表示式模式的字串
示例:var reg1 = /\w/;
reg1.test('a');輸出true
reg1.test('$');輸出false
var reg2 = /\w/g;
執行第一次reg2.test('ab')輸出true,
第二次輸出true,
第三次輸入false,第四次是true,這是由於lastindex在作怪
while(reg2.test('ab'))
結果輸出1 2 (下標從0開始);注意:lastindex在非全域性下是不生效的。
字串物件方法:
search()
方法用於檢索字串中指定的子字串,或檢索與正規表示式相匹配的子字串
方法返回第乙個匹配結果index,查詢不到返回-1
search()方法不執行全域性匹配,它將忽略標誌g,並且總是從字串的開始進行檢索
match(reg)
方法將檢索字串,以找到乙個或多個與regexp匹配的文字
regexp是否具有標誌g對結果影響很大
如過regexp沒有標誌g,那麼match()方法就只能在字串中執行一次匹配
如果沒有找到任何的匹配內容就返回null,否則它將返回乙個陣列,其中存放了與它找到的匹配文字相關的資訊
返回陣列的第乙個元素存放的是匹配文字,而其餘的元素存放的是與正規表示式的子表示式匹配的文字
除了常規的陣列元素之外,返回的陣列還含有2個物件屬性
index宣告匹配文字的起始字元在字串的位置
input宣告對stringobject的引用
如過regexp具有標誌g,那麼match()方法將執行全域性搜尋,找到字串中的所有匹配子字串
如果沒有找到任何的匹配內容就返回null,如果找到了乙個或多個匹配子串,則返回乙個陣列
陣列元素中存放的是字串中的所有匹配子串,而且也沒有index屬性或input屬性
replace()
replace(str, replacestr)
replace(reg, replacestr)
replace(reg, function)
function會在每次匹配替換的時候呼叫,有四個引數:
1、匹配字串
2、正規表示式分組內容,沒有分組則沒有該引數
3、匹配項在字串中的index
4、原字串
split()
使用split方法把字串分割為字元陣列
『a,b,c,d』.split(',');結果['a','b','c','d']
『a,b,c,d』.split(/\d/);結果['a','b','c','d']
Javascript正規表示式
這段時間學習js,正好遇到了正規表示式。下面通過使用例項介紹一下正規表示式。正規表示式,又稱正規表示法 常規表示法 英語 regular expression,在 中常簡寫為regex regexp或re 電腦科學的乙個概念。正規表示式使用單個字串來描述 匹配一系列符合某個句法規則的字串。在很多文字...
JavaScript 正規表示式
一 什麼是正規表示式 正規表示式 regular expression 是乙個描述字元模式的物件。測試正規表示式 regexp 物件包含兩個方法 test 和exec 功能基本相似,用於測試字串匹配。test 方法在字串中查詢是否存在指定的正規表示式並返回布林值,如果存在則返回true,不存 在則返...
javascript 正規表示式
正規表示式 regexp物件 主要用於表單驗證 1 建立正規表示式 1 var ret pattern pattern是內容,可以是正規表示式的內容,可以是字元或是其他的內容 2 var rag new regexp pattern 括號內可以是雙引號或者單引號 2 正規表示式的exec方法 reg...