JavaScript正则表达式

30次阅读
没有评论

共计 1430 个字符,预计需要花费 4 分钟才能阅读完成。

const str = "abcdefg"
const reg = /bc/ // 定义规则
console.log(reg.test(str)) // 是否匹配 true
console.log(reg.exec(str)) // 执行检索 返回数组 

元字符

大多数的字符仅能够描述它们本身,这些字符称作普通字符,例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。

元字符是一些具有特殊含义的字符,可以极大提高灵活性和强大的匹配功能。比如,规定用户只能输入 26 个英文字母,普通字符的话 abcdefghijk…,但是换成元字符写法:[a-z]。

在正则表达式中,“.”“*”“?”等符号都有特殊的含义,如果想匹配的就是这些符号,可使用中括号取消这些符号的特殊含义。

分类

  • 边界符:表示位置,开头 ^ 和结尾 $
  • 量词:表示重复次数
  • 字符类:比如 d 表示 0-9
符号 含义
[A-z] 任意字母
. 任意字符
+ 至少一个,相当于 {1,}
* 0 个或多个,相当于 {0,}
? 0 个或 1 个,相当于 {0,1}
w 任意字母数字下划线
W 除了字母数字下划线
d 任意数字,相当于 [0-9]
D 除了数字
s 空格
S 除了空格
b 单词边界
B 除了单词边界

字符串方法

split()

可以传递一个正则表达式作为参数。

var s = "1a2A3c4d5r6"
var result = s.split(/[A-z]/)
console.log(result)

search()

该方法只会查找第一个,即使设置全局匹配也没用。

var s = "cbcD aFc aeec app"
var result = s.search(/a[A-z]c/)
console.log(result)

match()

默认情况下 match() 只会找到第一个符合要求的内容,可以设置全局匹配模式(g)来匹配到所有的内容。

var s = "1c22bc3D4Fc00"
var result = s.match(/[a-z]/ig)
console.log(result)

replace()

默认情况下 replace() 只会替换第一个。

var s = "1c22bc3D4Fc00"
var result = s.replace(/[a-z]/gi, "")
console.log(result)

测试正则

JavaScript 中测试正则表达式的一种方法是使用 .test() 方法。.test() 方法会把编写的正则表达式和字符串(即括号内的内容)匹配,如果成功匹配到字符,则返回 true,反之,返回 false。

let myString = "Hello, World!";
let myRegex = /Hello/;
let result = myRegex.test(myString); // true

可以使用 .test 方法的“反向”.match() 方法来提取找到的实际匹配项。

"Hello, World!".match(/Hello/);

先行断言

有两种先行断言:正向先行断言(positive lookahead)和负向先行断言(negative lookahead)。

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

负向先行断言:pattern1(?!pattern2),pattern1 只有不在 pattern2 前面才匹配,pattern2 不会被计入返回结果,比如,要匹配后面跟的不是百分号的数字,就要写成 /\d+(?!%)/

正文完
post-qrcode
 0
三毛
版权声明:本站原创文章,由 三毛 于2023-08-02发表,共计1430字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)