正则表达式

360 阅读2分钟

正则表达式

正则表达式也是一个对象,用于定义一些字符串的规则。计算机可根据正则表达式来检查一个字符串是否符合规则,从而可以对字符串进行一些操作。

一、创建RegExp对象

创建一个正则表达式对象:

语法: var 变量名=new RegExp("正则表达式","匹配模式")

也可以使用字面量来创建正则表达式

语法: var 变量名=/正则表达式/匹配模式

二、规则

  1. 匹配模式

    匹配模式可写可不写,它的值可以是i或者g,i表示忽略大小写,g表示进入全局匹配模式。这两个值也可以都写上,且不论顺序,中间也没有标点符号

  2. 正则表达式

    | 表示或的意思

    [ ] 括号中的内容也表示或的意思,例如[abc]就表示 a或b或c

    [a-z] 表示任意小写字母

    [A-Z] 表示任意大写字母

    [A-z] 表示任意字母

    [^xx] 表示除xx以外

    [0-9] 表示任意数字

    ^a 表示以a开头

    a表示以a结束		如果是	^a 则表示a既是开头也是结尾

    以下都是 /内容{次数要求}/ 的格式

    a{n} 表示内容a正好出现n次

    a{x,y} 表示内容a出现了x~y次

    a{n,} 表示内容a出现了n次以上

    a{n+} 表示内容a至少出现了n次,等于{n,}

    a{n*} 表示内容a出现了0次或多次,等于{0,}

    a{n?} 表示内容a出现了0次或1次,等于{0,1}

例子:手机号规则 /^1[3-9][0-9]{9}$/

  1. 一些特殊的字符

    1. "." 可用来表示任意字符
    2. "\" 在正则表达式中,\为转义字符,可以将某些特殊的字符()表示出来。例如\.可用来表示.
    3. \w 表示任意字母、数字或下划线
    4. \W 表示除了字母、数字或下划线
    5. \d 表示任意数字
    6. \D 表示除了数字
    7. \s 表示空格
    8. \S 表示除了空格
    9. \b 表示单词边界,即表示单词是独立的
    10. \D 表示除了单词边界

    一些用法:

    去除开头的空格 字符串.replace(/^\s*/,"")

    去除结尾的空格 字符串.replace(/^\s$/,"")

    去除开头和结尾的空格 字符串.replace(/^\s*|^\s$/g,"")

三、方法

正则表达式是一个对象,这个对象中常见的有三个方法:compile(), exec(), test(); 其中complile用的不多,test()它是用来验证, exec()是用来匹配的。

test的用法:

正则表达式.test(字符串); 如果验证成功就返回true, 否则返回false。

let p = /^a/i;
let arr = "Acs2defga";
console.log(p.test(arr))    //true

exec的用法:

在目标字符串中找出符合正则表达式规则的子串。

  • exec()格式: 返回值 = 正则表达式.exec(目标字符串);

  • 返回值: 如果找到,返回数组;如果找不到,返回null

    let p = /a/ig;
    let arr = "这里A没ssa有a";
    console.log(p.exec(arr))    
    // [ 'A', index: 2, input: '这里A没ssa有a', groups: undefined ]
    

    如果按照上面的写法,只会找到第一个。要找到所有,使用 模式修正符g 全局匹配!

    如果目标字符串中有多个符号要求的子串,我们需要写多份结果

let p = /a/ig;
let arr = "这里A没ssa有a";
console.log(p.exec(arr))    // [ 'A', index: 2, input: '这里A没ssa有a', groups: undefined ]
console.log(p.exec(arr))    // [ 'a', index: 6, input: '这里A没ssa有a', groups: undefined ]
console.log(p.exec(arr))    // [ 'a', index: 8, input: '这里A没ssa有a', groups: undefined ]
console.log(p.exec(arr))    // null

四、应用

学习string时,有些方法可以配合正则使用。 replace()方法就是string中的一个方法,**replace**这个方法的作用:替换。

replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。

stringObject.replace(regexp/substr,replacement)

示例:

let arr = " 天气预报 ";
console.log(arr)    //  天气预报 
let res = arr.replace(/^\s|\s$/g,"换一下")
console.log(res)    // 换一下天气预报换一下