10分钟搞懂JS正则表达式

第一部分 基础知识

一、正则申明方式

1、构造函数方式

var reg = new RegExp('\d', 'gi');
修饰符说明
i忽略大小写匹配
g全局匹配,即是匹配一个后继续匹配,直到结束
m多行匹配,即是遇到换行后不停止匹配,直到结束

2、字面量方式

var reg = /\d/gi;

3.正则相关符号

3.1方括号 [] 

1)^ 在 [] 内开始位置及正则双斜线开始位置有特殊含义,其他位置表示 ^ 字符本身.$符号与^符号相反,表示结尾

'adobe 2016'.match(/^[a-zA-Z]+/);
// ["adobe"]
'adobep'.match(/p$/)
// ["p"]

 2)在 [] 内开始位置时,表示不匹配 [] 内除 ^ 以外的所有字符:

'adobe'.match(/[^abc]/g);
// ["d", "o", "e"]

 3)- (连字符)表示左边字符的 ASCII 值到右边字符 ASCII 编码值之间及左右字符自身的所有字符

'adobe PS 2016'.match(/[a-g]/g);
// ["a", "d", "b", "e"]

3.2、特殊含义字符 

● . 匹配任意单个字符,除换行和结束符

'1+0.2*2=1.4'.match(/.{2}/g);
// ["1+", "0.", "2*", "2=", "1."]

● \w 匹配任意单词字符(数字、字母、下划线),等价于[A-Za-z0-9_]

'ad34~!@$ps'.match(/\w/g);
// ["a", "d", "3", "4", "p", "s"]

● \W 匹配任意单词字符,与\w相反,等价于[^A-Za-z0-9_]

'ad34~!@$ps'.match(/\W/g);
// ["~", "!", "@", "$"]

● \d 匹配数字,等价于 [0-9]

'ps6'.match(/\d/g);
// ["6"]

● \D 匹配非数字,等价于 [0-9]'

'ps6'.match(/\D/g);
// ["p", "s"]

● \s 匹配空白字符,主要有(\n、\f、\r、\t、\v),注意'a\sb'中的\s依然是字符s,所以'a\sb'.match(/\s/g)返回 null

'adobe ps'.match(/\s/g);
// [" "]

● \S 匹配非空白字符,与\s相反

'adobe ps'.match(/\S/g);
// ["a", "d", "o", "b", "e", "p", "s"]

 

3.3、量词说明

● n+ 匹配包含至少一个n的字符串

'adobe paas'.match(/a+\w+/g);
// ["adobe", "aas"]

n* 匹配包含零个或多个n的字符串

n? 匹配包含零个或一个n的字符串

n{x} 匹配包含连续x个n的字符串 

n{x,y} 匹配包含至少连续x个且最多连续y个n的字符串

n{x,} 匹配包含至少连续x个n的字符串

表达式1表达式2
n+n{1,}
n*n{0,}
n?n{0,1}

3.4 小括号 () 用法

1)捕获用法
● 表示对匹配的字符串进行分组

'adobe cs9cs10, adobe cs11'.match(/([a-z]+\d+){1,2}/g)
//[ 'cs9cs10', 'cs11' ]

分组还有一个用法,替换字符串 ,$1,$2,$3 只是占位符

var dateStr = '2018/04/18';
var reg = /(\d{4})\/(\d{2})\/(\d{2})/;
dateStr = dateStr.replace(reg, '$1-$2-$3') //"2018-04-18"

 

● 与|一起使用表示选择性

"he is 12. she is 13. it's box".match(/(it|she|he)\s+is/g);
// ["he is", "she is"]

● 表示对匹配的字符串捕获(正则在非全局(g)模式下)

'adobe cs9'.match(/[a-z]+(\d+)/);
// ["cs9", "9"]
//注意是cs9里面中最后一个匹配的,比如
'adobe cs9f5'.match(/[a-z0-9]+(\d+)/)
//[ 'cs9f5', '5']

2)非捕获用法,以(?)形式出现

● (?:n ) 表示非捕获组(不会对匹配的字符串捕获)

'adobe11ps15test'.match(/[a-z]+(1|3)+([a-z]+)/);
// ["adobe11ps", "1", "ps"]
//如果不想数组含有1,可以这样
'adobe12ps15test'.match(/[a-z]+(?:\d+)([a-z]+)/);
// ["adobe12ps", "ps"]

● (?=n ) 匹配任何其后紧跟字符n的字符串,但返回中不包含n

'adobe12ps15test'.match(/[a-z]+(?=\d)/g);
// ["adobe", "ps"]

● (?!n ) 匹配任何其后没有紧跟字符n的字符串,返回中不包含n

'adobe12ps15test'.match(/[a-z]+(?!\d)/g);
// ["adob", "p", "test"]

● (?<=n ) 匹配任何其前紧跟字符n的字符串,返回中不包含n

'adobe12ps15test'.match(/(?<=\d)[a-z]+/g);
// ["ps", "test"]

● (?<!n ) 匹配任何其前紧跟字符n的字符串,返回中不包含n

'adobe12ps15test'.match(/(?<!\d)[a-z]+/g);
// ["adobe", "s", "est"]

3.5对象方法

1) RegExp对象相关方法

2)String对象相关方法

 

4.注意

.  *  + 等特殊符号的含义在[]中括号中失效

4.常见的正则表达式

1.手机号:/^1[35678]/d{9}$/

2.邮箱:/^\w+@\w+\.\w{2,5}$/   或者  /^[0-9a-zA-Z_-]+@[0-9a-zA-Z_-]+\.[0-9a-zA-Z_-]{2,5}$/

3.用户名:/^[a-zA-Z0-9_-]{4,15}$/    只能是字母数字下划线横杠,长度4-15位

4.密码:/^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,20}$/  至少含一个字母,数字  长度6-20位

 

  • 14
    点赞
  • 91
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
JavaScript正则表达式和Java正则表达式在语法上有一些差异,但是它们的基本概念和用法是相似的。下面是将JavaScript正则表达式转换为Java正则表达式的一些常见规则: 1. 语法差异: - JavaScript正则表达式使用斜杠(/)作为定界符,而Java正则表达式使用双引号(")作为定界符。 - JavaScript正则表达式中的特殊字符需要进行转义,而Java正则表达式中的特殊字符不需要转义。 2. 字符类: - JavaScript正则表达式中的字符类使用方括号([])表示,而Java正则表达式中使用方括号([])或者Unicode转义(\p{...})表示。 - JavaScript正则表达式中的字符类可以使用连字符(-)表示范围,而Java正则表达式中需要使用Unicode转义(\uXXXX)表示范围。 3. 量词: - JavaScript正则表达式中的量词使用花括号({})表示,而Java正则表达式中使用花括号({})或者问号(?)表示。 - JavaScript正则表达式中的贪婪量词默认是贪婪模式,而Java正则表达式中的贪婪量词需要在后面添加问号(?)来表示非贪婪模式。 4. 边界匹配: - JavaScript正则表达式中的边界匹配使用插入符号(^)和美元符号($)表示,而Java正则表达式中使用\A和\Z表示。 5. 其他差异: - JavaScript正则表达式中的捕获组使用圆括号(())表示,而Java正则表达式中使用圆括号(())或者方括号([])表示。 - JavaScript正则表达式中的反向引用使用反斜杠加数字(\1、\2等)表示,而Java正则表达式中使用美元符号加数字($1、$2等)表示。 以上是一些常见的JavaScript正则表达式转换为Java正则表达式的规则。具体转换时,还需要根据具体的正则表达式进行适当的调整。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值