正则表达式
虽然用的很少但每次用用的时候都是各种搜,然鹅找不到想要的,关键换是不了解各个符号的含义,有了这篇文章正则匹配不再求人。。。
正则表达式:查找与模式匹配的字符串部分
在JavaScript中,它们是在正斜杠之间//或使用new RegExp();可以预先定义正则表达式,也可以直接在调用方法时定义
const regexOne = /dpc/i const regexTwo = new RegExp('808','g')
/dpc/i ==> /.../(forward slashes) 正斜线 ,dpc(matching pattern) 模式匹配,i、g(optional flag(s)) 可选择的标志
匹配方式
const str = "dpc808" // str.match(regexOne) // "dpc" 匹配目标 str.match(regexTwo ) // "808" 匹配目标 str.replace(/r/, ‘D’) // "Dpc808" 找到目标并替换 contains_r = /r/.test(str) // true 检查目标返回true/false
匹配多个
str.match(/[psr]/) // "p" []中捕获任何匹配的字符(g返回所有匹配) str.match(/[a-e]/) // "d" -连字号捕获一系列字符(g返回所有匹配)
可选标志
在正则表达式的末尾添加可选标志,以修改匹配器的工作方式。
i =不区分大小写 m =多行匹配 g =全局匹配(查找全部,而不是查找一个)
str.match(/8/g) // "8" "8" str.match(/P/i) // "p" str.match(/P/ig) // "p"
开始和结束
开始将匹配项组合在一起以匹配更长的字符串
str.match(/^d/) // "d" “字符串开始” 第一个不是 d 返回 null str.match(/[0-9]$/) // "8" “字符串结尾” 最后一个不是 0-9中数字 返回 null str.match(/^[a-z][a-z][a-z]/) // "dpc"
通配符
使用通配符和特殊的转义字符来匹配较大类的字符
. =除换行符外的任何字符
\ d =数字 \ D =不是数字
\ s =空格 \ S =任何非空白 \ n新行
str.match(/^d/) // "d" “字符串开始” 第一个不是 d 返回 null str.match(/[0-9]$/) // "8" “字符串结尾” 最后一个不是 0-9中数字 返回 null str.match(/^[a-z][a-z][a-z]/) // "dpc"
特定数量
* = 匹配前面的子表达式零次或多次
+ = 1或 n 次
? = 0或1 次
{3} =正好3倍
{2,4} =两倍,三倍或四倍
{2,} =两倍或更多倍
str.match(/^d/) // "d" “字符串开始” 第一个不是 d 返回 null str.match(/[0-9]$/) // "8" “字符串结尾” 最后一个不是 0-9中数字 返回 null str.match(/^[a-z][a-z][a-z]/) // "dpc"
小括号匹配组
使用 parens()捕获组
match会返回完整匹配加上组,除非您使用g标志
使用管道运算符 | 在parens()内部以指定该组匹配的内容| =或
str.match(/^d/) // "d" “字符串开始” 第一个不是 d 返回 null str.match(/[0-9]$/) // "8" “字符串结尾” 最后一个不是 0-9中数字 返回 null str.match(/^[a-z][a-z][a-z]/) // "dpc"
反斜杠
str1 = "function(param1) { console.log('testing!!')}"
要匹配特殊字符,请使用反斜杠\
JS正则表达式中的特殊字符是:^ $ \。 * +? ()[] {} |
因此,要匹配一个星号,可以使用:\ *,不只是*
str1.match(/\(.*\)/) //["(param1){ console.log("testing!!")"] str1.match(/\([a-zA-Z0-9]\)/) // ["(param1)"]
中括号里的^
当该符号在方括号表达式中使用时,表示不接受该方括号表达式中的字符集合
str1.match(/\([^0-9\)]*\)/g) // ["('testing!!')"] (param1)有数字 1 所以不满足