javascript技巧

关注公众号 jb51net

关闭
首页 > 网络编程 > JavaScript > javascript技巧 > js正则表达式及方法

JavaScript正则表达式及其方法详细介绍

作者:ᥬ 小月亮

正则表达式是一种强大的文本处理工具,主要用于在字符串中进行模式匹配、数据验证和文本替换,这篇文章主要给大家介绍了关于JavaScript正则表达式及其方法的详细介绍,需要的朋友可以参考下

一、正则表达式的介绍:

1、含义:

正则表达式用来定义一个规则,是Js中的一个对象。

2、作用:

① 计算机可以检查一个字符串是否符合规则

② 将字符串中符合规则的内容进行提取

二、正则表达式的创建:

1、 通过构造函数创建:new RegExp(规则, 标识)

① 标识 / 匹配模式:

(1)匹配模式的数据类型:字符串

(2)匹配模式取值:

i:忽略大小写g:全局匹配模式

var reg = new RegExp('a','i');
consoole.log(reg)  // /a/i

② 使用场景:动态创建规则

③ 注意事项:

当使用转义字符(\)的时候,需要写两个 \\

var reg = new RegExp('\\w','i');
consoole.log(reg)  // /\w/i

2、 字面量创建:var 变量 = /规则/标识

var reg = /a/i ;
consoole.log(reg)  // /a/i

三、正则表达式的语法:

1、 或 的表示:

① | :表示整体的或

// 匹配ab或c或de的字符串
let reg = /ab|c|de/;
let str = 'c'
let result = reg.test(str)
console.log(result) // true

② [] :表示字符集 – 只要有某个字符就行

// 匹配任意包含a或b或c或d的字符串
let reg = /[abcd]/;
let str = 'cd'
let result = reg.test(str)
console.log(result) // true

2、 任意的小写字母:

① [a-z]:

// 匹配任意包含a到z之间的内容
let reg = /[a-z]/;
let str = 'c'
let result = reg.test(str)
console.log(result) // true

② /[a-z]/i:

// 匹配任意忽略大小写的包含a到z之间的内容
let reg = /[a-z]/i;
let str = 'H'
let result = reg.test(str)
console.log(result) // true

2、 任意的大写字母:

① [A-Z]:

// 匹配任意包含A到Z之间的内容
let reg = /[A-Z]/;
let str = 'c'
let result = reg.test(str)
console.log(result) // false

② /[A-Z]/i:

// 匹配任意忽略大小写的包含A到Z之间的内容
let reg = /[A-Z]/i;
let str = 'c'
let result = reg.test(str)
console.log(result) // true

3、 任意字母:[a-zA-Z]

// 匹配任意字母
let reg = /[a-zA-Z]/;
let str = 'cfff'
let result = reg.test(str)
console.log(result) // true

4、任意数字:

① [0-9]:

// 匹配任意数字
let reg = /[0-9]/;
let str = '123'
let result = reg.test(str)
console.log(result) // true

② \d:

// 匹配任意除了0到9之外的内容
let reg = /\d/;
let str = 'cd123d'
let result = reg.test(str)
console.log(result) // true

5、除了XXX:[^ ]

// 匹配任意除了包含a或b之外的内容
let reg = /^[abb]/;
let str = 'bc'
let result = reg.test(str)
console.log(result) // true

6、匹配除了数字之外的:

① [^0-9]:

// 匹配任意除了0到9之外的内容
let reg = /[^0-9]/;
let str = '111ccc'
let result = reg.test(str)
console.log(result) // true

② \D:

// 匹配任意除了0到9之外的内容
let reg = /\D/;
let str = '111ccc'
let result = reg.test(str)
console.log(result) // true

7、除了换行符之外的任意字符:.

// 匹配除了换行符之外的任意字符
let reg = /./;
let str = '\n'
let result = reg.test(str)
console.log(result) // false

8、转义字符:\

// 匹配.
let reg = /\./;
let str = 'ab.c'
let result = reg.test(str)
console.log(result) // true

9、匹配任意的字母、数字、下划线:

① \w:

let reg = /\w/;
let str = '&111&'
let result = reg.test(str)
console.log(result) // true

② [A-z0-9_]:

let reg = /[A-z0-9_]/;
let str = '&111&'
let result = reg.test(str)
console.log(result) // true

10、匹配除了任意的字母、数字、下划线之外的任意内容:

① \W:

let reg = /\W/;
let str = '11sA!'
let result = reg.test(str)
console.log(result) // true

② [^A-z0-9_]:

let reg = /[^A-z0-9_]/;
let str = '11sA!'
let result = reg.test(str)
console.log(result) // true

11、匹配空格:\s

let reg = /\s/;
let str = '   11sA   '
let result = reg.test(str)
console.log(result) // true

12、除了空格之外的任意内容:\S

let reg = /\S/;
let str = '  aa'
let result = reg.test(str)
console.log(result) // true

13、单词边界的任意内容:\b

① 单词边界含义:单词左右两边和非单词的位置,同类无界。

② 作用:用来精准的匹配单词

let reg = /\bchild\b/;
let str = 'children'
let result = reg.test(str)
console.log(result) // false

14、除了单词边界之外的任意内容:\B

① 非单词边界含义:单词内部的字符之间的位置。

② 使用:

// 非单词边界处的“cat”
let reg = /\Bcat\B/g;
let str = "The cat scattered his food all over the catacomb.";
let result = str.match(reg)
console.log(result) // ['cat']

15、匹配开头:^

// 匹配当前内容是否以a开头
let reg = /^a/;
let str = '  aa'
let result = reg.test(str)
console.log(result) // false

16、匹配结尾:$

// 匹配当前内容是否以a结尾
let reg = /a$/;
let str = '  aa'
let result = reg.test(str)
console.log(result) // true

17、完全匹配:^ $

要求字符串和正则完全匹配

let reg = /^a$/;
let str = "a";
let result = reg.test(str)
console.log(result) // true

四、量词:设置一个内容出现的次数

量词只对它前边的一个内容起作用

1、出现m次:{m}

// 匹配是否有出现3次的a
let reg = /a{3}/;
let str = "aaa123";
let result = reg.test(str)
console.log(result) // true
// 匹配是否有只出现3次的a
let reg = /^a{3}$/;
let str = "aaaa";
let result = reg.test(str)
console.log(result) // false
// 匹配出现3次的字符,字符取值a到z
let reg = /[a-z]{3}/;
let str = "acd";
let result = reg.test(str)
console.log(result) // true
// 匹配出现3次的字符串ab
let reg = /(ab){3}/;
let str = "acd";
let result = reg.test(str)
console.log(result) // false

2、 出现m-n次:{m,n}

// 匹配出现1到3次的a
let reg = /a{1,3}/;
let str = "ahhh";
let result = reg.test(str)
console.log(result) // true

3、 出现m次以上:{m,}

// 匹配出现3次以上的a
let reg = /a{3,}/;
let str = "aa123";
let result = reg.test(str)
console.log(result) // false

4、 至少出现一次:

① +:

// 匹配至少出现1次的a
let reg = /a+/;
let str = "aaa123";
let result = reg.test(str)
console.log(result) // true

② {1,}:

// 匹配至少出现1次的a
let reg = /a{1,}/;
let str = "aaa123";
let result = reg.test(str)
console.log(result) // true

5、出现0次或者多次(任意次数):

① *:

// 匹配出现0次或者多次的a
let reg = /a*/;
let str = "123";
let result = reg.test(str)
console.log(result) // true

② {0,}:

// 匹配出现0次或者多次的a
let reg = /a{0,}/;
let str = "123";
let result = reg.test(str)
console.log(result) // true

6、出现0次或者1次:

① ?:

// 匹配出现0次或者1次的a
let reg = /a?/;
let str = "b123";
let result = reg.test(str)
console.log(result) // false

② {0,1}:

// 匹配出现0次或者1次的a
let reg = /a{0,1}/;
let str = "b123";
let result = reg.test(str)
console.log(result) // false

五、正则表达式的方法:

1、 通过正则表达式检查一个字符串是否符合规则:

① 正则表达式.test(字符串):符合返回 true

// 判断当前字符串是否含有 a
let reg = new RegExp('a', 'i');
let str = 'abc';
let result = reg.test(str);
console.log(result) // true

2、将一个字符串拆分为一个数组:字符串.split(正则表达式):

全局匹配

// 根据任意字母拆分字符串
let reg = /[A-z]/;
let str = 'a1b2c3d4';
let result = str.split(reg)
console.log(result) // ['', '1', '2', '3', '4']

3、搜索字符串中是否含有指定内容:字符串.search(正则表达式):

searchindexOf的区别:indexOf的参数只能是字符串,search的参数可以是正则表达式。
只会查找第一个,即使设置了全局匹配,也没有用

如果搜索到指定内容,则会返回第一次出现的索引,如果没有搜索到,则返回 -1。

// 查找第一个a加b或或f加c组成的内容
let reg = /a[bef]c/;
let str = 'hello abc hello aec afc';
let result = str.search(reg)
console.log(result) // 6

4、将符合条件的内容提取出来:

① 字符串.match(正则表达式):

默认情况下,match只会找到第一个符合要求的内容,将匹配到的内容封装到一个数组中返回。设置正则表达式的全局匹配模式,会匹配所有的内容

// 不区分大小写,全局匹配所有字母
let reg = /[A-z]/ig;
let str = 'a1b2c3d4ABCD';
let result = str.match(reg)
console.log(result) // ['a', 'b', 'c', 'd', 'A', 'B', 'C', 'D']

② 字符串.matchAll(正则表达式):

必须设置正则表达式的全局匹配模式!

返回值是一个迭代器RegExpStringIterator {},需要使用for-of进行遍历.

let reg = /[A-z]/g;
let str = 'a1b2c3d4ABCD';
let result = str.matchAll(reg)
console.log(result) // RegExpStringIterator {}
let arr = []
for(let i of result) {
    arr.push(i)
}
console.log(arr)

③ 正则表达式.exec(字符串):

默认只会替换匹配到的第一个内容

// 匹配所有符合axc格式的第一个内容
let reg = /a[a-z]c/;
let str = "abcadcaecacc";
let result = reg.exec(str)
console.log(result) // ['abc', index: 0, input: 'abcadcaecacc', groups: undefined]

Tips: 设置正则表达式的全局匹配模式,每调用一次方法就会匹配下面的内容

// 匹配所有符合axc格式的内容
let reg = /a[a-z]c/ig;
let str = "abcadcaecacc";
console.log(reg.exec(str)) // ['abc', index: 0, input: 'abcadcaecacc', groups: undefined]
console.log(reg.exec(str)) // ['adc', index: 3, input: 'abcadcaecacc', groups: undefined]
console.log(reg.exec(str)) // ['aec', index: 6, input: 'abcadcaecacc', groups: undefined]
console.log(reg.exec(str)) // ['acc', index: 9, input: 'abcadcaecacc', groups: undefined]
console.log(reg.exec(str)) // null

将需要提取的分组内容用()进行包裹

// 匹配所有符合axc格式的内容,并且将分组的内容进行提取
let reg = /a([a-z])c/ig;
let str = "abcadcaecacc";
console.log(reg.exec(str)) //['abc', 'b', index: 0, input: 'abcadcaecacc', groups: undefined]
console.log(reg.exec(str)) // ['adc', 'd', index: 3, input: 'abcadcaecacc', groups: undefined]
console.log(reg.exec(str)) // ['aec', 'e', index: 6, input: 'abcadcaecacc', groups: undefined]
console.log(reg.exec(str)) // ['acc', 'c', index: 9, input: 'abcadcaecacc', groups: undefined]
console.log(reg.exec(str)) // null

获取所有符合规则的分组:使用循环

// 匹配所有符合axc格式的内容,并且将分组的内容进行提取。
let reg = /a(([a-z])c)/ig;
let str = "abcadcaecacc";
let result = reg.exec(str);
let arr = []
while(result) {
    arr.push({
        str: result[0],
        group1: result[1],
        group2: result[2],
    })
    result = reg.exec(str);
}
console.log(arr) 
// [
//     {
//         "str": "abc",
//         "group1": "bc",
//         "group2": "b"
//     },
//     {
//         "str": "adc",
//         "group1": "dc",
//         "group2": "d"
//     },
//     {
//         "str": "aec",
//         "group1": "ec",
//         "group2": "e"
//     },
//     {
//         "str": "acc",
//         "group1": "cc",
//         "group2": "c"
//     }
// ]

5、内容替换:字符串.replace(正则表达式, 新内容)

默认只会替换匹配到的第一个内容

// 将匹配到的第一个a替换为(●ˇ∀ˇ●)
let reg = /a/;
let str = 'a1b2a3d4ABaD';
let result = str.replace(reg,'(●ˇ∀ˇ●)')
console.log(result) // (●ˇ∀ˇ●)1b2a3d4ABaD

六、 常用的正则:

1、去除开头和结尾的空格:

var reg = /^\s+|\s+$/g
var str = "       hell    o       "
str.replace(reg,"")  // 结果:hell    o

2、输入框中只允许输入正数(包含小数):

onkeyup="value= (value.replace(/[^.0-9]/,'').replace(/.*?(\d+\.?\d*).*/g,'$1')).replace(/^0+/,'0')"

总结 

到此这篇关于JavaScript正则表达式及其方法详细介绍的文章就介绍到这了,更多相关js正则表达式及方法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文