JS 正则表达式

定义

正则表达式就是使用表达式,来查找或比对复杂字符串,达到模糊搜索或过滤的作用。

 构成

正则表达式的字符模式是,由一系列拥有特殊功能的元字符,和一系列修饰符组成的,特殊格式的字符串。

创建方式

字面量创建

使用 let 直接创建一个正则表达式,查找从 0 至 9 的数字,也就是查找所有数字。

let demo = /[0-9]/;

实例创建

查找空格或者空白。其中的 ‘ \ ’ 为转义字符。

let demo = new RegExp('\\s')

二者之间的区别

  • 字面量创建方式不能进行字符串拼接,实例创建则可以。
    • let demo1 = 'wdn';
      let demo101 = new RegExp(demo1+'md');    // => '/wdnmd/'
      let demo102 = /demo1/;    // => '/demo1/'
  • 字母量创建方式特殊含义的字符不需要转义,实例创建则需要
    • let demo1 = new ReqExp('\s')    // => '/s/'
      let demo2 = new ReqExp('\\s')    // => '/\s/'
      let demo3 = /\s/    // => '/\s/'

语法

元字符

  • 拥有特殊含义的字符
  • 普通元字符
元字符描述
/asd/匹配 ‘ / ’ 之中的字符串
  • 特殊元字符
元字符描述
\转义字符,' n ' 匹配字符 ' n '。' \n ' 匹配一个换行符。序列 ' \\ ' 匹配 ' \ ' ,  而 ' \( ' 则匹配 ' ( ' 。
.匹配除了换行符 ‘ \n ’ 所有的单个字符。要包括 ‘ \n ’ 则使用 ‘ (.|\n) ’
^设置开始的元字符
$设置结束的元字符
\n匹配一个换行符
\d数字字符,作用等同于 ‘ [0-9] ’。
\D非数字字符,作用等同于 ‘ [^0-9] ’。
\w字母、数字、下划线,作用等同于 ' [A-Za-z0-9_] '。
\W非字母、数字、下划线,作用等同于 ' [^A-Za-z0-9_] '。
\s任何空白字符,包括空格、制表符、换页符等等,作用等同于 ‘ [ \f\n\r\t\v] ’ 。
\S任何非空白字符,作用等同于 ‘ [ ^\f\n\r\t\v] ’ 。
\t匹配一个制表符,作用等同于 ' \x09 ' 和 ' \cI ' 。
\f匹配一个换页符
\r匹配一个回车符
\b单词边界,也就是指单词和空格间的位置。例如: ' er\b ' 可以匹配 " never " 中的 ' er ' ,但不能匹配  " verb " 中的 ' er ' 。
x|yx 或 y,例如:' z|food ' 能匹配 " z " 或 " food "。' (z|f)ood ' 则匹配 " zood " 或 " food "。

修饰符

修饰符描述
i对大小写不敏感的匹配
g进行全局匹配并非在查找到第一个就停止匹配而是查找所有
m进行多行的匹配

数量修饰符

  • 表示数量的修饰
数量修饰符描述
n+

匹配至少包含一个 ‘ n ’ 的字符串,类似 {1,}

例如:‘ /a+/ ’ 匹配 ‘ are ’ 中所有的 ‘ a ’,' aaaa ' 中所有的 ’ a ‘

n*

匹配任何包含零个或多个n的字符串,类似 {0,}

例如:' /ar*/ ' 匹配 ‘ are ’ 中的 ‘ ar ’, ' add ' 中的 ‘ a ’, ‘ aaaa ’ 中的 ‘ a ’, 但是不匹配 ' re ' 

n?

匹配任何包含零个或一个n的字符串,类似 {0,1}

例如:‘ / de? / ’ 匹配 ‘ deff ’ 中的 ‘ de ’, 匹配 ‘ dede ’ 中的 ‘ de ’, 匹配 ‘ dfd ' 中的 ' d ', 不匹配 ’ eee ‘

n{x}

x是一个非负整数,匹配确定的 x 个 n

例如:' o{2} ' 不匹配 ‘ Bob ’ 中的 'o',但匹配 ’ food ‘ 中的两个 ’ o ‘

n{x,}

x是一个非负整数,至少匹配 x 个 n

例如,' o{2,} ' 不匹配 ’ Bob ‘ 中的 ' o ',但匹配 ’ foooood ‘ 中的所有 ’ o ‘

n{x, y}

x 和 y 均为非负整数且 x <= y,最少匹配 x 次,最多匹配 y 次

例如,‘ o{1,3} ’ 将匹配 ‘ fooooood ’ 中的前三个 ‘ o ’

n$

匹配所有结尾为 ‘ n ’ 的字符串

^n

匹配所有开头为 ‘ n ’ 的字符串

n(?=m)

匹配任何后面紧接着 ' m ' 的 ' n ' 

在m前面加个空格就可以匹配和 ' m ' 之间有一个空格的 ' n '

n(?!m)

匹配任何后面没有接着 ' m ' 的 ' n '

方括号

  • 用于查找某个范围内的字符
方括号描述
[^xy]未包含 ' x ' 、' y ' 的任意字符
[xyz]包含 ' x ' 、' y ' 、' z '的任意字符
[x-z]' x-z ' 这个范围中的任意字符
[^x-z]非 ' x-z ' 这个范围中的任意字符
·[A-z] 查找从 ' A ' 到 ' Z ' 的所有大小写字符

正则表达式的方法

test()

  • 检测字符串是否符合正则表达式的规则,返回布尔值,符合则返回ture。
  • let demo = /[0-9]/
    demo.test('2')    // => true
    demo.test('a')    // => false

exec()

  • 检测字符串是否有符合正则表达式的规则,如果有符合的部分则返回该匹配值,否则null。
  • let demo = /[0-9]/
    demo.exec('aaa')    // => null
    demo.exec('1')    // => ["1", index: 0, input: "1", groups: undefined]

支持正则表达式的字符串方法

search()

  • 用于匹配字符串中指定的子字符串,或匹配与正则表达式规则匹配的子字符串
  • 返回匹配到的子字符串所在的位置,没有匹配到则返回 -1
  • 'string'.search('valuestring')    // => -1
    'stringvalue'.search('string')    // => 0
    'valuestring'.search('string')    // => 5

match()

  • 可以在字符串内匹配指定的值,或匹配一个、多个符合正则表达式的匹配
  • 使用时需要加上 g 如果没有 g 则该方法就只会执行一次,加上 i 可以大小写都匹配
  • 返回关于所有匹配到的子字符串信息的数组,若没有则返回 null
  • 'foot'.match(/a/g)    // => null
    'foot'.match(/o/g)    // => (2) ["o", "o"]
    'foOt'.match(/o/gi)    // => (2) ["o", "O"]

replace()

  • 用于在字符串中用一些字符串替换另一些字符串,或替换一个与正则表达式规则匹配的字符串
  • 可以使用修饰符来限制匹配
  • 'abcda'.replace(a, 'ooo')    // => "ooobcda"
    'abcda'.replace(/a/g, 'ooo')    // => "ooobcdooo"

split() 

  • 可以把一个字符串分割成字符串数组
  • 分割的位置可以是指定的参数,或是一个正则表达式,从正则表达式匹配到的参数处分割
  • 'How are you doing today?'.split(' ')  
    // => (5) ["How", "are", "you", "doing", "today?"]
    
    'How are you doing today?'.split(/[a-c]/)    
    // => (3) ["How ", "re you doing tod", "y?"]
    
    'How are you doing today?'.split(/[a-c]/, 1)    
    // => (1) ["How "]
    
    'How are you doing today?'.split(' ', 3)    
    // => (3) ["How", "are", "you"]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值