3. 【正则】量词

n+ 代表匹配多个或1个符合n的字符

  • +有些类似g全局匹配,但不同的是会将连续符合规则的字符连接在一起。
  • 正则具有两个特性:
  • 不回头:匹配过的字符,不会再匹配
  • 贪婪模式:能匹配多则不匹配少(针对量词+才有贪婪?)
var str = 'abc'
var reg = /\w+/g
str.match(reg) // ["abc"]

var reg1 = /\w/g
str.match(reg) // ["a", "b", "c"]

var reg2 = /\w+/
str.match(reg) // ["abc"]

var str = 'a+bc'
var reg = /\w+/g
str.match(reg) // ["a", "bc"]

var str = 'a+bc'
var reg = /\w+/
str.match(reg) // ["a"]

n* 代表匹配多个或0个符合n的字符

  • 和+的区别是,匹配出来的结果比+多了一个空字符串
var str = "abc"
var reg = /\w*/
str.match(reg) // ["abc"]

var str = "abc"
var reg = /\w*/g
str.match(reg) // ["abc", ""]

var str = "abc+-"
var reg = /\w*/g
str.match(reg) // ["abc", "", "", ""] // 第一个"" 为匹配+的结果,第二个""为匹配-的结果,第三个""为匹配的最后一位

n? 代表匹配1个或0个符合n的字符

"ab".match(/\w?/g) // ["a", "b", ""]

{x,y} 代表区间,从x到y个

  • x需小于y
  • 如果不写y,{x,}代表x到正无穷
  • 如果不写, {x}代表个数为x个
"abc".match(/\w{1,2}/g) // ["ab", "c"]

^n代表匹配以n开头的字符

// 匹配出以字母开头后面是数字的字符
"a1bc".match(/^\w\d/g) // [ "a1" ]

n$代表匹配以n结尾的字符

// 匹配出以字母结尾前面是数字的字符
"a1a1c".match(/\d\w$/g) // [ "1c" ]

x(?=y) 代表匹配x后面是y的字符,最终将x匹配出来

  • x(?!y)代表匹配x后面不是y的字符,最终将x匹配出来
"ab234ab".match(/a(?=b)/g)  // ["a", "a"]

总结

  • n{1,} === n+
  • n{0,} === n*
  • n{0,1} === n?

parctice

  • 匹配以ab开头并且以ab结尾的任意字符
"ab564DFab".match(/^ab[\w\W]*ab$/g) // ["ab564DFab"]
"ab564DFab".match(/^ab.*ab$/g) // ["ab564DFab"]
  • 匹配以ab开头或以ab结尾的任意字符
"4ab564DFab".match(/(^ab.*)|(.*ab$)/g) // ["4ab564DFab"]
  • 以138开头的手机号码
/^138\d{8}$/.test("13812345678") //true

你可能感兴趣的:(3. 【正则】量词)