JavaScript正则表达式

编程 · 2023-08-02 · 247 人浏览
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+(?!%)/

JavaScript
Theme Jasmine by Kent Liao