JS高级--正则表达式

 

在正则表达式语法中,放括号表示字符范围。在方括号中可以包含多个字符,表示匹配其中任意一个字符。如果多个字符的编码顺序是连续的,可以仅指定开头和结尾字符,省略中间字符,仅使用连字符-表示。如果在方括号内添加脱字符^前缀,还可以表示范围之外的字符。例如:

  • [abc]:查找方括号内任意一个字符。
  • [^abc]:查找不在方括号内的字符。
  • [0-9]:查找从 0 至 9 范围内的数字,即查找数字。
  • [a-z]:查找从小写 a 到小写 z 范围内的字符,即查找小写字母。
  • [A-Z]:查找从大写 A 到大写 Z 范围内的字符,即查找大写字母。
  • [A-z]:查找从大写 A 到小写 z 范围内的字符,即所有大小写的字母。
量词描述
n+匹配任何包含至少一个 n 的字符串
n*匹配任何包含零个或多个 n 的字符串
n?匹配任何包含零个或一个 n 的字符串
n{x}匹配包含 x 个 n 的序列的字符串
n{x,y}匹配包含最少 x 个、最多 y 个 n 的序列的字符串
n{x,}匹配包含至少 x 个 n 的序列的字符串

针对 6 种重复类惰性匹配的简单描述如下:

  • {n,m}?:尽量匹配 n 次,但是为了满足限定条件也可能最多重复 m 次。
  • {n}?:尽量匹配 n 次。
  • {n,}?:尽量匹配 n 次,但是为了满足限定条件也可能匹配任意次。
  • ??:尽量匹配,但是为了满足限定条件也可能最多匹配 1 次,相当于 {0,1}?。
  • +?:尽量匹配 1 次,但是为了满足限定条件也可能匹配任意次,相当于 {1,}?。
  • *? :尽量不匹配,但是为了满足限定条件也可能匹配任意次,相当于 {0,}?。
JavaScript 正则表达式支持的边界量词
量词说明
^匹配开头,在多行检测中,会匹配一行的开头
$匹配结尾,在多行检测中,会匹配一行的结尾

 

正向声明:匹配模式 (?= 匹配条件)

指定匹配模式后面的字符必须被匹配,但又不返回这些字符。

反向声明:匹配模式(?! 匹配条件)

与正向声明匹配相反,指定接下来的字符都不必被匹配。

JS正则表达式语法大全(非常详细)

JavaScript里正则常用API
一、5个常用方法:
1. test
reg.test(str); // 返回是否包含正则 true/false

var str = "abcdefghijkl3mnop2qts";
/\d/.test(str); // true

2. match

str.match(reg); // 一般正则表达式加g,会返回包含所有匹配项的数组

var str = "abcdefghijkl3mnop2qts";
str.match(/\d/g); // ["3", "2"]

3. search
str.search(reg); // 返回第一条匹配的索引位置

var str = "abcdefghijkl3mnop2qts";
str.search(/\d/); // 12

4. replace
str.replace(str/reg, replacement); // 不改变原字符串,返回新字符串
5. exec
在循环中反复地调用 exec() 方法是唯一一种获得全局模式的完整模式匹配信息的方法。

var reg = /\d/g;
var str = "abcdefghijkl3mnop2qts";

reg.exec(str); // ["3", index: 12, input: "abcdefghijkl3mnop2qts", groups: undefined]
// 可以使用 reg.lastIndex 判断目前的执行进度
reg.lastIndex; // 13
reg.exec(str); // ["2", index: 17, input: "abcdefghijkl3mnop2qts", groups: undefined]
reg.exec(str); // null
// 之后循环往复

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
正则表达式是一种强大的文本模式匹配工具,JavaScript中也提供了丰富的正则表达式API。下面是一些正则表达式高级用法: 1. 零宽断言 零宽断言是一种特殊的正则表达式语法,用于匹配在给定位置前面或后面的内容,但并不将这些内容包含在匹配结果中。它们被称为“零宽度”因为它们不会匹配任何实际字符,只是用于查找文本而已。JavaScript中支持三种零宽断言: - (?=pattern):正向先行断言,匹配某个位置后面紧跟着指定模式的内容。 - (?!pattern):负向先行断言,匹配某个位置后面不紧跟着指定模式的内容。 - (?<=pattern):正向后行断言,匹配某个位置前面紧跟着指定模式的内容。 - (?<!pattern):负向后行断言,匹配某个位置前面不紧跟着指定模式的内容。 例如,要匹配以字母开头,且后面跟着数字和字母的字符串,可以使用正向先行断言: ``` const str = "a1b2c3"; const pattern = /^[a-z](?=[a-z0-9])/i; const result = str.match(pattern); console.log(result[0]); // "a1" ``` 2. 非捕获分组 捕获分组是指用小括号将某个模式括起来,以便后面可以引用这个匹配结果。但有时我们只想匹配某个模式,而不需要捕获它。这时可以使用非捕获分组,它的语法为 (?:pattern)。 例如,要匹配以数字开头,后面跟着一个或多个连续的数字和句号(.),然后以数字结尾的字符串,可以使用非捕获分组: ``` const str = "123.456.789"; const pattern = /^(?:\d+\.)+\d+$/; const result = str.match(pattern); console.log(result[0]); // "123.456.789" ``` 3. 贪婪匹配与非贪婪匹配 默认情况下,正则表达式是贪婪匹配,即尽可能多地匹配符合模式的文本。但有时我们需要非贪婪匹配,即只匹配符合模式的最短文本。这时可以在重复匹配符号后面加上问号(?)。 例如,要匹配以左括号开头,右括号结尾的最短字符串,可以使用非贪婪匹配: ``` const str = "(a(b)c)d"; const pattern = /\(.*?\)/; const result = str.match(pattern); console.log(result[0]); // "(b)" ``` 以上是一些JavaScript正则表达式高级用法,希望能对你有所帮助!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值