js正则表达式

3 篇文章 0 订阅

js正则表达式规则

js正则的语法为:

// '\ \' 符号内包含的是要匹配的内容,例如,如下是匹配abc
var reg = \abc\ ;

字面量字符和元字符

最简单的匹配模式,即字面含义,例如: \abc\ 即匹配字符串abc.

var reg = /cat/;
reg.test('dog and cat'); //true
序号符号匹配
1.匹配除回车(\r)、换行(\n) 、行分隔符(\u2028)和段分隔符(\u2029)以外的所有字符。注意,对于码点大于0xFFFF字符,点字符不能正确匹配,会认为这是两个字符。
2^位置字符:表示字符串的开始位置,例如/^test/会匹配开始位置的字符串
3$位置字符:表示字符串的结束位置,例如/test$/会匹配结束位置的字符串
4|选择符:正则表达式中表示"或",例如cat

转义符

如果要匹配一个符号,而不是作为正则表达式的符号,那么将符号前加上: \ , 例如:+ , 匹配 : +

正则表达式中,需要反斜杠转义的,一共有12个字符:^、.、[、$、(、)、|、*、+、?、{和\。需要特别注意的是,如果使用RegExp方法生成正则对象,转义需要使用两个斜杠,因为字符串内部会先转义一次。

(new RegExp('1\+1')).test('1+1')
// false
(new RegExp('1\\+1')).test('1+1')
// true

匹配特殊字符

正则表达式对一些不能打印的特殊字符,提供了表达方法。

  • \cX 表示Ctrl-[X],其中的X是A-Z之中任一个英文字母,用来匹配控制字符。
  • [\b] 匹配退格键(U+0008),不要与\b混淆。
  • \n 匹配换行键。
  • \r 匹配回车键。
  • \t 匹配制表符 tab(U+0009)。
  • \v 匹配垂直制表符(U+000B)。
  • \f 匹配换页符(U+000C)。
  • \0 匹配null字符(U+0000)。
  • \xhh 匹配一个以两位十六进制数(\x00-\xFF)表示的字符。
  • \uhhhh 匹配一个以四位十六进制数(\u0000-\uFFFF)表示的 Unicode 字符。

字符类

多个字符中任意匹配一个,使用符号 [] ,例如,[ABC] 匹配A,B,C中的任意一个字符;
[a-z]表示匹配a-z中任意一个字符.

特殊符号

符号功能
^脱字符:表示非,例如[^xyz],除了字符x,y,z都可以匹配
-连字符:某些情况下,对于连续序列的字符,连字符(-)用来提供简写形式,表示字符的连续范围。比如,[abc]可以写成[a-c],[0123456789]可以写成[0-9],同理[A-Z]表示26个大写字母。

预定义模式

预定义模式是指某些常见模式的简写方式.

  • \d 匹配0-9之间的任意数字, 相当于[0-9]
  • \D 匹配所有0-9之外的字符,相当于[^0-9]
  • \w 匹配任意字母,数字和下划线,相当于[A-Za-z0-9_]
  • \W 匹配所有除了字母和数字和下划线以外的字符,相当于[\A-Za-z0-9_]
  • \s 匹配空格(换行符,制表符,空格符), 相当于 [\t\r\n\v\f]
  • \S 匹配非空格的字符,相当于[^ \t\r\n\v\f]
  • \b 匹配词的边界
  • \B 匹配非词边界,即在词的内部

重复类

模式的匹配次数用{}表示, {n} 表示恰好重复n次,{n,} 表示至少重复n次,{n,m}表示重复n-m次

量词符

量词符,用来设定某个模式出现的次数.

  1. ? = {0,1}
  2. * = {0,}
  3. + = {1,}

贪恋模式

匹配的默认模式是贪婪模式, 用一个? 表示非贪恋模式

  1. +? = 表示某个模式出现1次或多次,使用非贪婪模式
  2. *? = 同理
  3. ?? = 同理

修饰符

修饰符放在正则的尾部

  1. g : global,表示全局匹配,匹配全部的符合结果
    var regex = /b/;
    var str = 'abcd'
    regex.test(str); //true
    regex.test(str); //true
    regex.test(str); //true
    
    连续输出三次true,若果我们加上g 修饰符,那么会怎样?
    var regex = /b/g;
    var str = 'aba';
    
    regex.test(str); // true
    regex.test(str); // false
    regex.test(str); // false
    
    结果只输出了一次true,因为每次开始的位置都是上一次结束的下一个位置,并不从头开始.
  2. i : ignoreCase,表示忽略大小写 .
    /abc/.test('ABC') // false
    /abc/i.test('ABC') // true
    
  3. m:multiline, 表示多行模式,默认情况下, ^$ 匹配字符串的开始和结尾处,加上m 后,还会匹配行首和行尾部.即会识别换行符.
    /world$/ .test('hello world\n') // false
    /world$/m.test('hello world\n') //true
    /^b/m.test('a\nb') // true
    

组匹配

概念

正则中的小括号() 表示分组匹配,括号中的模式可以用来匹配分组的内容.

/fred+/.test('fredd') // true
/(fred)+/.test('fredfred') // true

上面代码中,第一个模式没有括号,结果+只表示重复字母d,第二个模式有括号,结果+就表示匹配fred这个词。

var m = 'abcabc'.match(/(.)b(.)/);
m
// ['abc', 'a', 'c']

上面代码中,正则表达式/(.)b(.)/一共使用两个括号,第一个括号捕获a,第二个括号捕获c。

如果使用了g 修饰符,那么就不会捕获分组的内容,即不会单独匹配()中的内容.

var m = 'abcabc'.match(/(.)b(.)/g);
m // ['abc', 'abc']

如果想要捕获每一轮的组捕获,需要使用exec() 方法

var str = 'abcabc';
var reg = /(.)b(.)/g ;
while(true){
var result = reg.exec(str);
if (!result) break;
console.log(result);
}
// ["abc","a" , "c"]
// ["abc","a" , "c"]

正则表达式的内部,还可以用\n引用括号匹配的内容,n 是从1开始的自然数,表示对应括号的顺序

'abcabc'.match(/(.)b(.)\1b\2/)
// ["abcabc", "a", "c", index: 0, input: "abcabc", groups: undefined]

非捕获组

(?:x) : 非捕获组,表示不返回改组匹配的内容,即匹配的结果中不计入这个括号.

非捕获组的作用请考虑这样一个场景,假定需要匹配foo或者foofoo,正则表达式就应该写成/(foo){1, 2}/,但是这样会占用一个组匹配。这时,就可以使用非捕获组,将正则表达式改为/(?:foo){1, 2}/,它的作用与前一个正则是一样的,但是不会单独输出括号内部的内容。

var m = 'abc'.match(/(?:.)b(.)/);
m // ["abc", "c"]
// 非捕获组不会出现在匹配的字符串数组中

先行断言

x(?=y) 称为先行断言, x只有在y前面才匹配,y不会计入返回结果. 比如,要匹配后面跟着的百分号数字,可以写成/\d+(?=%)/

先行否定断言

x(?!y) 称为先行否定断言,x只有不在y前面才匹配, y不会被计入匹配结果. 比如,要匹配后面跟的不是百分号的数字,就要写成/\d+(?!%)/

/d+(?!\.)/.exec('3.14')
// ['14']

参考>https://wangdoc.com/javascript/stdlib/regexp.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
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正则表达式的规则。具体转换时,还需要根据具体的正则表达式进行适当的调整。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值