Bootstrap

JavaScript学习之正则表达式

1.正则表达式简介

正则表达式是用于定义一些字符串的规则,计算机根据正则表达式来检查字符串是否符合规则,或把字符串中符合规则的部分提取出来。

2.正则表达式语法

1.创建正则表达式的对象(使用构造函数创建)

语法:var 变量=new RegExp("正则表达式","匹配模式");
可传递第二个参数作为匹配模式,它有两个值:

  • i:忽略大小写;使用时加双引号,RegExp("a","i");
  • g:全局匹配模式;

正则表达式的方法:
test():使用该方法能够检查某个字符串是否符合正则表达式的规则。符合返回true, 不符合就返回false。
例子:

var reg=new RegExp("a");
var str="abc";
console.log(reg.test(str));//返回true
这个正则表达式比较简单,只要有a就是符合规则。

当test()内不传值时是undefined
在这里插入图片描述

2.使用字面量来创建正则表达式

语法:var 变量=/正则表达式/匹配模式
例子:var reg=/a/i; console.log(typeof reg); //输出object
使用字面量创建更加方便,但是使用构造函数更加灵活,因为里面的正则表达式可不写死,更改方便。

3.正则表达式语法

  • 创建一个正则表达式,用于检查字符串中是否有 a 或 b 或 c。
    var reg =/a|b|c/; console.log(reg.test("acbef"));//输出true
    这里使用|来表示
    也可以用var reg=/[abc]/;
    []里的内容也表示

  • 检查一个字符串中是否含有小写字母;
    var reg=/[a-z]/
    这里的[a-z]:表示a到z,即任意的小写字母。使用 -
    [A-z]:任意字母。

  • 检查一个字符串是否有abc,adc或aec。
    写法一:/abc|adc|aec/
    写法二:/a[bde]c/

  • 另外:/[^ab]/:除了a和b
    /[^0-9]/:除了数字 [^]除了的意思(^只在中括号内是除了的意思).

  • 量词

    • 通过量词可以设置一个内容出现的次数。
    • 量词只对其前面的内容起作用,
    • {n}:正好出现n次。/a{3}/==/aaa/,/(ab){2}/==/abab/
    • {m,n}:出现m-n次。
    • {m,}:出现m次以上。
    • +: 至少一个。相当于{1,}/a+/
    • *: 0个或多个。相当于{0,}
    • ?: 0个到1个。相当于{0,1}./ab?c/
  • 检查一个字符串是否以a开头。
    var reg=/^a/; ^:是开头的意思。
    $表示结尾。
    /^a|a$/表示以a开头或以a结尾。
    var reg=/^a[1-9]b$/;表示三个字符长度,a开头,中间为数字,结尾为b。
    在正则表达式中同时使用^和$就能规定字符串的长度

练习实践:
创建一个正则表达式,用来检查字符串是否为一个合法手机号:
1.十一位。
2,开头为1。
3.第二位为34578中的任一个。
4.第三位后任意数字。

var str="15177777777";
var phoneReg=/^1[34578][0-9]{9}$/;
console.log(phoneReg.test(str));//输出true,符合规则
  • 查找字符串中是否含有.
    注意:.:表示查找单个字符,除了换行和行结束符。
    所以要使用转义字符:/\./
    在使用构造函数时,因为其参数为一个字符串,而\为字符串中的转义字符。
    所以var reg=new RegExp("\\.");表示.

特殊字符:(有很多对,基本意思就是相反)

  • \b 查找位于单词的开头或结尾的匹配。 /\bchild\b/为单词设置了边界,就能检查到独立的child单词。
    \B 查找不处在单词的开头或结尾的匹配。
  • \w 查找单词字符。
    \W 查找非单词字符。
  • \d 查找数字。
    \D 查找非数字字符。
  • \s 查找空白字符。 var result=str.replace(/\s/g,"");将str里的空格全部去除
    \S 查找非空白字符。
  • \0 查找 NUL 字符。
    \n 查找换行符。
    \f 查找换页符。
    \r 查找回车符。
    \t 查找制表符。
    \v 查找垂直制表符。
    \xxx 查找以八进制数 xxx 规定的字符。
    \xdd 查找以十六进制数 dd 规定的字符。
    \uxxxx 查找以十六进制数 xxxx 规定的 Unicode 字符。

更多的可以再去看文档。

练习:用户输入的用户名,前后误输了空格,用户名中间也有空格,怎么只删除前后的空格而不删除中间的。

var str= prompt("请输入用户名");
console.log(str.length);
console.log(str);
var result=str.replace(/^\s*|\s*$/g,"");
//^\s*表示将前面的连续空格全替换,\s*$表示将后面的连续空格全替换。
console.log(result.length);
console.log(result);

在这里插入图片描述
在这里插入图片描述

3.支持正则表达式的string对象的方法

1.split()

该方法可以将一个字符串,按照指定的某个字符串拆分,并返回个数组。
方法中传递的参数可以为一个正则表达式,然后该方法就会按照正则表达式去拆分数组。

var str="1a2s3d4f5g6h7j8k9t";
var result=str.split(/[A-z]/);
console.log(result);

在这里插入图片描述

2.search()

  • 可以搜索字符串中是否含有指定内容。
  • 当搜索到指定内容时,返回其第一次出现的位置的索引,如果没有则返回-1.
  • 该方法可接收一个正则表达式作为参数,然后根据正则表达式对字符串进行检索。
    console.log("asd afg afd aed".search(/a[sfe]d/));//返回索引值0

3.match()

可以根据正则表达式从字符串中把符合规则的内容都提取出来。
默认情况下返回符合条件的第一个,然后停止检索,但是可以通过正则表达式的第二个参数设置正则表达式为全局匹配模式,这样就能把所有符合条件的内容检索到并返回
match()会将检索到的内容以数组形式返回,即使只有一个结果。找不到就返回null。
例如:把所有的字母提取出来

var str="1a2s-d3f4g5f6d7s8r9QWE";
console.log(str.match(/[a-z]/ig));

(可以为一个正则表达式设置多个匹配模式,且顺序无要求,i,g,ig,gi)
在这里插入图片描述

4.replace()

可以将字符串中的指定内容替换为指定的内容。
有两个参数:
1.被替换的内容,可以接收一个正则表达式作为参数。
2.新的内容。
注意:其默认只会替换第一个,要全部替换,要设置正则表达式为全局匹配。
例子:将一个字符串提纯为纯数字。

var str="1a2W3e4r5t6ysf7G8hhhd9j";
console.log(str.replace(/[a-z]/ig,""));//ig:全局加不区分大小写,
这样所有字母都被替换为空字符串(""

在这里插入图片描述

注意:split()不需要设置全局匹配,也全部拆分,search()既是设置了全局匹配,也只能查找第一个。

;