正则表达式的符号

特殊符号和字符

符号

表示法描述正则表达式示例
literal匹配文本字符串的字面值literalaaa
re1|re2匹配正则表达式re1或re2aaa|bbb
.匹配任何字符(除了\n)b.b
^匹配字符串起始部分^/bin
$匹配字符串结束部分*.sh$
*匹配0次或者多次前面出现的正则表达式[0-9]*
+匹配1次或者多次前面出现的正则表达式[0-9]+
?匹配0次或者1次前面出现的正则表达式zoo?
{N}匹配N次前面出现的正则表达式[0-9]{3}
{M,N}匹配m~N次前面出现的正则表达式[0-9]{3}
[…]匹配来自字符集的任意一个字符[13579]
[…x-y…]匹配0~9范围中的任意一个字符[0-9]
[^…]不匹配此字符集中出现的任何一个字符,包括某一范围的字符集[abc][0-9a-zA-Z]
(*|+|?|{})?用于匹配上面频繁出现/重复出现符号的非贪婪版本(*、+、?、{}).*?[a-z]]
(…)匹配封闭的正则表达式,然后另存为子组([0-9]{3})?,f(oo|o)bar

特殊字符

表示法描述正则表达式示例
\d匹配任何十进制数字,与[0-9]一致,(\D与\d相反)\d+
\w匹配任何字母数字字符,与[0-9a-zA-A]一致,(\W与之相反)\w+
\s匹配任何空格字符,与[\n\r\t\r\v\f] 形同,(\S与之相反)\s+
\b匹配任何单词边界,(\B与之相反)\bThe\b
\N保存已保存的子组N(参看上面的(…))price:\16
\c逐字匹配任何特殊字符c(即,仅按照字面意思匹配,不匹配特殊含义)\\,\*,\.
\A(\Z)匹配字符串的起始(结束)(另见上面的^和$)\Addd

扩展表示法

表示法描述正则表达式示例
(?iLmsux)在正则表达式中嵌入一个或者多个特殊"标记"参数(或者通过 函数/方法)(?x),(?im)
(?:…)表示一个匹配不用保存的分组(?:\w+.)*
(?P<name>)像一个仅由name标识而不是数字ID标识的正则分组匹配(?P<data>)
(?P=name)在同一字符串中匹配由(?P<name>)分组之前的文本(?P=data)
(?#…)表示注释,所有内容都被忽略(?#comment)
(?=…)匹配条件是如果…出现的之后的位置,而不使用输入字符串;称作正向前视断言(?=.com)
(?!..)匹配条件是如果…不出现的之后的位置,而不使用输入字符串;称作负向前视断言(?!.net)
(?<=…)匹配条件是如果…出现的之前的位置,而不使用输入字符串;称作正向后视断言(?<=800-)
(?<!..)匹配条件是如果…不出现的之前的位置,而不使用输入字符串;称作正向后视断言(?<!192\.168\.)
(?(id/name)Y|N)如果分组所提供的id或者name存在,就返回正则表达式的条件匹配Y,如果不存在,就返回N;|N是可选项(?(1)y|x)

正则前面的 (?i) (?s) (?m) (?is) (?im) 是什么意思?

这是内联匹配模式,通常用内联匹配模式代替使用枚举值RegexOptions指定的全局匹配模式,写起来更简洁。

  1. (?i) 表示所在位置右侧的表达式开启忽略大小写模式
  2. (?s) 表示所在位置右侧的表达式开启单行模式。
    注意:(?s)通常在匹配有换行的文本时使用
  3. (?m) 表示所在位置右侧的表示式开启指定多行模式。
    更改 ^ 和 $ 的含义,以使它们分别与任何行的开头和结尾匹配,而不只是与整个字符串的开头和结 尾匹配。
    注意:(?m)只有在正则表达式中涉及到多行的“^”和“$”的匹配时,才使用Multiline模式。
    上面的匹配模式可以组合使用,比如(?is),(?im)。
    另外,还可以用(?i:exp)或者(?i)exp(?-i)来指定匹配的有效范围。

JavaScript正则表达式m修饰符:

m修饰符规定正则表达式可以执行多行匹配。
m修饰符的作用是修改^和$在正则表达式中的作用,让它们分别表示行首和行尾。
在默认状态下,一个字符串无论是否换行只有一个开始^和结尾$,如果采用多行匹配,那么每一个行都有一个^和结尾$。

  • 语法结构:

    构造函数方式:

     new RegExp("regexp","m")
    
  • 对象直接量方式:

     /regexp/m
    
  • 浏览器支持:

  1. IE浏览器支持此元字符。
  2. 火狐浏览器支持此元字符。
  3. 谷歌浏览器支持此元字符。

实例代码:
实例一:

var str="This is an\n antzone good"; 
var reg=/an$/;
console.log(str.match(reg));

以上代码不能够匹配字符串"an",尽管"an"后面已经换行了,但是并没有采用多行匹配,所以不是字符串行的结尾。

实例二:

var str="This is an\n antzone good"; 
var reg=/an$/m;
console.log(str.match(reg));

以上代码可以匹配字符串"an",因为采用了多行匹配。

实例三:

var reg = /^b/;
var str = 'test\nbbs';
execReg(reg,str);

匹配失败,因为字符串的开头没有b字符。但是加上m修饰符之后:

实例四:

var reg = /^b/m;
var str = 'test\nbbs';
execReg(reg,str);

匹配到b,因为加了m修饰符之后,^已经表示行首,由于bbs在字符串第二行的行首,所以可以成功地匹配。

参考:
[1]: python核心编程(第三版) [美]Wesley Chun著,孙波翔,李斌,李晗 译
[2]: https://blog.csdn.net/codepen/article/details/40396769
[3]: https://www.jb51.net/article/101139.htm

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值