正规式 - 微介绍

建立正规式

正规式也可以叫做正则表达式,在 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/ 表示字串开头须为 abc
2.如写在 [] 内则为排除字串,例如: /[^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"

以上就是正规式的简易介绍,试着用正规式来做一些事情吧!


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章