正則表達式與符號含義

創(chuàng)建方式


// 用雙斜杠包裹
/[abc]/
// 用js內(nèi)置對象創(chuàng)建
let reg = new RegExp(/[0-9]*/)
// 用js內(nèi)置對象通過字符串創(chuàng)建
let reg = new RegExp('[0-9]*')

任意字符 .

let reg = /./
let str = '123'
console.log(str.match(reg)) //=> ['1', index: 0, input: '123', groups: undefined]

中括號:[]

  • 表示匹配中括號內(nèi)除了-的元素一次
let reg = /[0-9]/
let str = '123x'
str.match(reg) // => 1

否定字符集 [^abc]

// 查找下方文本的所有單詞(ber 和 bor 除外)
let reg = /(?:b[^abc]r)+/g
let str = 'bar ber bcr bor bbr'
console.log(str.match(reg)) => // ['ber', 'bor']

加號:+

  • 表示匹配前面的表達式1次或者多次,匹配不到返回null
let reg = /[0-9]+/
let str = '123x'
str.match(reg) // => 123

let str2 = 'x'
str2.match(reg) // => null

星號:*

  • 表示匹配前面的表達式0次或多次,匹配不到返回空字符串:''
let reg = /[0-9]*/
let str = '123x'
str.match(reg) // => 123

let str2 = 'x'
str2.match(reg) // => ['', index: 0, input: 'x', groups: undefined]

花括號:{n} {a,b}{c,}

  • 表示匹配前面的表達式n次或a-b或至少出現(xiàn)c次,匹配不到返回null
let reg = /[0-9]{2}/
let str = '123x'
str.match(reg) // => 12

let reg = /[0-9]{2,3}/
let str = '123x'
str.match(reg) // => 123

let reg = /[0-9]{2,3}/
let str = '12xx'
str.match(reg) // => 12

let reg = /[0-9]{2,3}/
let str = 'xx'
str.match(reg) // => null

let reg = /[0-9]{2,}/
let str = '1'
str.match(reg) // => null

let reg = /[0-9]{2,}/
let str = '123'
str.match(reg) // => 123

匹配開頭:^

  • 表示開頭必須以^后面的表達式開始,不匹配返回null
let reg = /^1/
let str = '123'
str.match(reg) // => 1

let reg = /^1/
let str = 'x123'
str.match(reg) // => null

匹配結(jié)尾:$

  • 表示結(jié)尾必須以$前面的表達式開始,不匹配返回null
let reg = /1$/
let str = '121'
str.match(reg) // => 1

let reg = /1$/
let str = 'x123'
str.match(reg) // => null

匹配空格: \s

let reg = /\s/
// let reg = new RegExp('\\s') 注意轉(zhuǎn)義
// let reg = new RegExp(/\s/) 注意寫法
let str = '12 '
str.match(reg) // => [' ', index: 2, input: '12 ', groups: undefined]

匹配非空格: \S

let reg = /\S/
// let reg = new RegExp('\\S') 注意轉(zhuǎn)義
// let reg = new RegExp(/\S/) 注意寫法
let str = '12 '
str.match(reg) // => ['1', index: 0, input: '12 ', groups: undefined]

匹配任意字符

let reg = /[\s\S]/
let str = '12 '
str.match(reg) // => ['1', index: 0, input: '12 ', groups: undefined]

匹配單詞字符 \w: 字母、數(shù)字和下劃線

let reg = /\w/g

匹配非單詞字符 \W(大寫w): 字母、數(shù)字和下劃線

let reg = /\W/g

匹配數(shù)字字符\d

let reg = /\d/g

匹配非數(shù)字字符\D

let reg = /\D/g

匹配正整數(shù)

let reg =  /^[1-9][0-9]*|[0]$/

分組()

  • 匹配小數(shù)如1.0 0.1 .1 1. . 這幾個元素
  • 技巧:可以將這四種情況依次的正則寫出來再通過| 合并
// 浮點數(shù)
let testArr = ["1","10",".1","1.","0","0.1","1.0",'.'];
let reg = /\.[0-9]+$|([1-9][0-9]*|[0])(\.[0-9]?)?$/;
console.log(
  testArr.map(item=>{
    let res = item.match(reg)
    if(res) return res[0]
    else return res
  })) // => ['1', '10', '.1', '1.', '0', '0.1', '1.0', null]

exec

  • 將正則匹配的結(jié)果依次輸出
  • 使用exec在有幾個括號()的時候就會在括號()沒有匹配到內(nèi)容的時候返回undefined
  • 在左括號后面加上 ?: 則可以消除undefined,如下面reg2所示
// 匹配浮點數(shù)與+-*空白符 并且用?:消除括號帶來的undefined
let s = '11.01+0.122- .3*4./5 '
let reg = /([1-9][0-9]*|[0])(\.([0-9]+)?)?|\.[0-9]+|\+|\-|\*|\/|\s+/g; 
let res
while((res = reg.exec(s))){
   console.log(res)// => 以加號的輸出結(jié)果為例:  ['+', undefined, undefined, undefined, index: 5, input: '11.01+0.122- .3*4./5 ', groups: undefined]
}

let s = '11.01+0.122- .3*4./5 '
let reg2 = /(?:[1-9][0-9]*|[0])(?:\.(?:[0-9]+)?)?|\.[0-9]+|\+|\-|\*|\/|\s+/g; 
let res
while((res = reg.exec(s))){
   console.log(res) // => 以加號的輸出結(jié)果為例:  ['+', index: 5, input: '11.01+0.122- .3*4./5 ', groups: undefined]
}

學(xué)習(xí)正則練習(xí)場

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

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

  • 關(guān)鍵詞:正則表達式 正則表達式是一種特殊的字符串模式,用于匹配一組字符串 元字符 量詞關(guān)于量詞所涉及到的重要的三個...
    ferrint閱讀 905評論 0 2
  • 1. 概述 正則表達式(regular expression)是一種表達文本模式(即字符串結(jié)構(gòu))的方法,有點像字符...
    JRG_Orange閱讀 2,716評論 0 50
  • 正則表達式中的特殊字符 字符 含意 \ 做為轉(zhuǎn)意,即通常在""后面的字符不按原來意義解釋,如/b/匹配字符"b",...
    Allan要做活神仙閱讀 610評論 0 0
  • 最近在學(xué)PHP,js時需要用到正則表達式,盡管在學(xué)Python時學(xué)了一些但是不夠系統(tǒng)。每次看到繁瑣的正則,就淺嘗輒...
    zjbao123閱讀 537評論 0 2
  • 初衷:看了很多視頻、文章,最后卻通通忘記了,別人的知識依舊是別人的,自己卻什么都沒獲得。此系列文章旨在加深自己的印...
    DCbryant閱讀 4,268評論 0 20

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