建立正规式
正规式也可以叫做正则表达式,在 JavaScript 中可以使用两个 /
或 new RegExp
来建立,且其型别为物件
const ares = /a+87/const ares = new RegExp('a+87')typeof /a+87/// object
如需要测试也可使用regex101
使用时机
正规式常常会用在搜寻
与取代
两个地方,让我们看看如何使用
搜寻
使用 test
方法可以检视是否有符合字串,会回传 true
或是 false
const ares = "Hello everybody, I am a loner."/friend/.test(ares)// false
取代
JavaScript 中取代我们会使用 replace
方法,这时候就可以使用正规式
const ares = "Hello everybody, I am a loner."ares.replace(/loner/, "loser")// "Hello everybody, I am a loser."
开始使用
除了单纯使用字元来过滤以外,正规式还有许多功能语法,这里列出大部分的语法~
符号类
\
正规式有需多预设的功能符号,如需单纯输出符号则需加上反斜线
例如:
\^
表示匹配 ^ 符号|
表示多个条件,例如:
/aa|cc/
匹配 aabbcc
中的 aa 或 cc^
1.表示开头需匹配的字串,例如:
/^abc/
表示字串开头须为 abc2.如写在
[]
内则为排除字串,例如: /[^abc]/
表示排除所有 abc 开头字串$
与
^
相反,表示字尾须匹配的字串,须加在字元后方例如:
/abc$/
表示匹配所有 abc 结尾的字串*
表示匹配前一字 0 到多次,例如:
/bo*/
匹配 booed
中的 boo+
表示匹配前一字 1 到多次,例如:
/bo+/
不会匹配 brooded
中的任何字元?
表示匹配前一字 0 到 1 次,例如:
/bo?/
匹配 booed
中的 bo.
匹配换行符号以外所有字元
功能类
[]
限制搜寻的範围,另外可使用
-
来指定一个範围例如:
/[a-z]/
表示匹配 a 到 z 的所有字元{n, m}
规定符号确切发生的次数为 n ~ m 次,n、m 为正整数,m 若不填则无上限
例如:
/a{0, 2}/
表示匹配 a 出现 0~2 次的字串群组类
()
将小括号内的东西当成一个群组,可重複使用,依照顺序为 1~n
例如:
/(foo)(bar)\1\2/
可匹配 foobarfoobar
,\1
= foo、\2
= bar使用 replace 取代字串则需使用
$
符号const abc3 = "foobarfoobar"abc3.replace(/(foo)(bar)\1\2/, '$1')// "foo"
(?:y)
同
()
,但是不会记忆群组x(?=y)
寻找符合 x 的字元,且字元后面须接 y ,不会记忆群组
x(?!y)
寻找符合 x 的字元,且字元后面不是 y ,不会记忆群组
反斜线英文类
这类有些有大小写,大小写匹配的字元都是互补的
\w
等同于
[A-Za-z0-9_]
\W
等同于
[A-Za-z0-9_]
以外的字元\s
匹配任何空白,包括空格、製表符、换页符、换行符,例如:
/\s\w*/
匹配 foo bar
中的 bar\S
匹配任何不是空白的字元,例如:
/\S\w*/
匹配 foo bar
中的 foo\d
匹配任何数字,等同于
[0-9]
\D
匹配任何非数字,等同于
[^0-9]
\b
所有匹配且在边界的字元,例如:
/\bm/
匹配 moon
中的 m\B
所有匹配且不在边界的字元,例如:
/\B../
匹配 noonday
中的 oo\r
匹配 Enter 符号
\n
匹配换行符号
\t
匹配 tab 符号
\xhh
、\uhhhh
使用 Unicode 编码或是 ASCII 编码,例如:
/[\x21]/
、/[\u4E00-\u9FA5]/
参数
参数会写在 /
后方
// 单个参数const ares = /a+87/gconst ares = new RegExp('a+87', 'g')// 多个参数const ares = /a+87/giconst ares = new RegExp('a+87', 'gi')
再来介绍参数的种类,目前 JavaScript 不只这三种,但是这三个最常用的~
g
:global,範围为全域,不加此参数只会找到第一个i
:insensitive,不区分大小写m
:muliti line,可匹配多行,主要应用于 ^
与 $
符号// 加上 \n 会换行const abc1 = "abc123\nabc123\nabc123"const abc2 = "abc123abc123abc123"// gabc2.replace(/a/, "b")// "bbc123abc123abc123"abc2.replace(/a/g, "b")// "bbc123bbc123bbc123"// iabc2.replace(/A/gi, "b")// "bbc123bbc123bbc123"// mabc1.replace(/^A/gim, "b")// "bbc123\nbbc123\nbbc123"
以上就是正规式的简易介绍,试着用正规式来做一些事情吧!