『JavaScript』正则表达式

本篇博客介绍一些正则表达式相关的语法以及一些字符串的方法。

什么是正则表达式?


正则表达式(Regular Expression,在代码中常简写为regex,regexp或RE),又称为规则表达式。主要用来定义一些字符串的规则,使得计算机可以根据正则表达式来检查一个字符串是否符合规则

正则表达式的创建


正则表达式有两种创建方式

  • 使用构造方法创建;语法:var reg = new RegExp("正则表达式", "匹配模式");
  • 使用字面值常量创建;语法:var reg = /正则表达式/匹配模式;

两种方法都可以用来创建一个正则表达式,使用字面量创建更加简单使用构造函数创建更加灵活(构造函数中传入的是字符串,可以传入一个变量)

常用的匹配模式

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

正则表达式的简单使用


正则表达式对象中有一个test()方法,使用这个方法可以检查一个字符串是否符合正则表达式的规则,符合规则返回true,否则返回false。

// 创建一个正则表达式
// 该正则表达式可以用来检查一个字符串中是否含有a或A,忽略大小写
var reg = /a/i;

// 验证下面三个字符串是否符合正则表达式的规则
document.write("reg.test(\"abcdeg\"): " + reg.test("abcdeg") + "<br />");
document.write("reg.test(\"bcAdeg\"): " + reg.test("bcAdeg") + "<br />");
document.write("reg.test(\"bcdeg\"): " + reg.test("bcdeg") + "<br />");

在这里插入图片描述

正则表达式的基本语法


我们通过一些简单的需求来介绍基本语法
[]:[]中的内容表示的关系,和|一样;如:[ab]表示a或b,a|b也表示a或b。
检查一个字符串中是否含有a或b

// 检查字符串中是否包含a或b
var reg1 = /[ab]/;
var reg2 = /a|b/;

document.write("reg1: " + reg1 + "<br />");
document.write("reg1.test(\"acdeg\"): " + reg1.test("acdeg") + "<br />");
document.write("reg1.test(\"bcdeg\"): " + reg1.test("bcdeg") + "<br />");
document.write("reg1.test(\"cdeg\"): " + reg1.test("cdeg") + "<br /><br />");

document.write("reg2: " + reg2 + "<br />");
document.write("reg2.test(\"acdeg\"): " + reg2.test("acdeg") + "<br />");
document.write("reg2test(\"bcdeg\"): " + reg2.test("bcdeg") + "<br />");
document.write("reg2test(\"cdeg\"): " + reg2.test("cdeg") + "<br />");

在这里插入图片描述

[a-z]表示a或b或c…或z,表示任意小写字母;同样的[A-Z]表示任意大写字母[0-9]表示任意数字
检查一个字符串中是否包含任意小写字母

// 检查是否包含任意小写字母
var reg = /[a-z]/;

document.write("reg: " + reg + "<br />");
document.write("reg.test(\"ae86\"): " + reg.test("ae86") + "<br />");
document.write("reg.test(\"9527\"): " + reg.test("9527") + "<br />");

在这里插入图片描述

检查一个字符串中是否包含xyz或xaz或xuz

// 检查是否包含xaz或xuz或xyz
var reg = /x[auy]z/;

document.write("reg: " + reg + "<br />");
document.write("reg.test(\"xaz\"): " + reg.test("xaz") + "<br />");
document.write("reg.test(\"xuz\"): " + reg.test("xuz") + "<br />");
document.write("reg.test(\"xyz\"): " + reg.test("xyz") + "<br />");
document.write("reg.test(\"xyy\"): " + reg.test("xyy") + "<br />");

在这里插入图片描述

[^]:表示除了,如:[^ab]表示除了a和b
检查字符串中是否包含除了xyz之外的字符

// 检查是否包含除了xyz的其他字符
var reg = /[^xyz]/;

document.write("reg: " + reg + "<br />");
document.write("reg.test(\"xyz\"): " + reg.test("xyz") + "<br />");
document.write("reg.test(\"x\"): " + reg.test("x") + "<br />");
document.write("reg.test(\"y\"): " + reg.test("y") + "<br />");
document.write("reg.test(\"z\"): " + reg.test("z") + "<br />");
document.write("reg.test(\"axyz\"): " + reg.test("axyz") + "<br />");

在这里插入图片描述

量词

  • {n}正好出现n次,如:a{3}等价于aaa
  • {m,n}:出现m~n次,如:a{1~3}等价于a|aa|aaa
  • {m,}:出现m次及以上
  • +:出现至少一次,等价于{1,}
  • *:出现0次或多次,等价于{0,}
  • ?:出现0次或一次,等价于{0,1}

注意量词只对它前边的一个内容起作用
检查一个字符串中是否包含xyzxyzxyzxyz

// 检查是否包含xyzxyzxyzxyz
var reg = /(xyz){4}/;

document.write("reg: " + reg + "<br />");
document.write("reg.test(\"xyzxyzxyzxyz\"): " + reg.test("xyzxyzxyzxyz") + "<br />");
document.write("reg.test(\"xyzxyz\"): " + reg.test("xyzxyz") + "<br />");

在这里插入图片描述

^:表示以什么开头,如^a:表示以a开头
$:表示以什么结尾,如a$:表示以a结尾
检查一个字符串是否以abc开头或以xyz结尾

// 检查一个字符串是否以abc开头或以xyz结尾
var reg = /^abc|xyz$/;

document.write("reg: " + reg + "<br />");
document.write("reg.test(\"abcxyz\"): " + reg.test("abcxyz") + "<br />");
document.write("reg.test(\"abchehe\"): " + reg.test("abchehe") + "<br />");
document.write("reg.test(\"hehexyz\"): " + reg.test("hehexyz") + "<br />");
document.write("reg.test(\"hehe\"): " + reg.test("hehe") + "<br />");

在这里插入图片描述
下面看一个例子

// 检查一个字符串是否为s
// 以s开头,立刻结束,只能是s
var reg = /^s$/;

document.write("reg: " + reg + "<br />");
document.write("reg.test(\"s\"): " + reg.test("s") + "<br />");
document.write("reg.test(\"bs\"): " + reg.test("bs") + "<br />");
document.write("reg.test(\"sb\"): " + reg.test("sb") + "<br />");

在这里插入图片描述

小练习创建一个正则表达式,用来检查一个字符串是不是一个合法的手机号
首先,我们来分析,手机号第一位只能是1第二位只能是3~9的数字剩余的9位可以是任何数字

// 检测一个字符串是不是一个合法的手机号
var reg = /^1[3-9][0-9]{9}$/;

document.write("reg: " + reg + "<br />");
document.write("reg.test(\"15599631399\"): " + reg.test("15599631399") + "<br />");
document.write("reg.test(\"12599631399\"): " + reg.test("12599631399") + "<br />");
document.write("reg.test(\"32599631399\"): " + reg.test("32599631399") + "<br />");

在这里插入图片描述

元字符

  • \w任意字母、数字和下划线
  • \W:与\w相反,除了字母、数字和下划线
  • \d任意数字,等价于[0-9];
  • \D:和\d相反,除了数字
  • \s空格
  • \S:和\s相反,除了空格
  • \b单词边界
  • \B:和\b相反,除了单词边界
  • .:表示任意字符,如果想要在表达式中使用.需要使用\进行转义,即:\.

小练习:创建一个正则表达式,检测一个字符串是否是一个合法的邮箱格式
邮箱格式如:[email protected]。我们规定@前的xxx可以使用数字、字母和下划线,长度必须在2~10之间,@后的xxx只能是字母或数字

// 检测一个字符串是否符合邮箱格式
var reg = /^\w{2,10}@[A-Za-z0-9]{2,10}\.com$/;

document.write("reg: " + reg + "<br />");
document.write("reg.test(\"[email protected]\"): " + reg.test("[email protected]") + "<br />");
document.write("reg.test(\"[email protected]\"): " + reg.test("[email protected]") + "<br />");
document.write("reg.test(\"##[email protected]\"): " + reg.test("##[email protected]") + "<br />");

在这里插入图片描述

正则表达式在字符串相关方法中的使用


split()


将一个字符串拆分为数组,可以传入一个正则表达式,就可以根据正则表达式匹配到的字符串进行切分

var str = "1A2B3C4D5E6F7G";
var reg = /[A-Z]/;

// 根据任意字母切分字符串
var result = str.split(reg);
alert("result: " + result);

在这里插入图片描述

search()


检索与正则表达式相匹配的内容,如果搜索到指定内容,返回第一次出现的索引;如果没有搜到,返回-1。可以接收一个正则表达式作为参数,然后会根据正则表达式去检索字符串。

var str = "abcxyzxyzxyzabc";
var reg = /(xyz){3}/;

// 查找匹配的字符串
var result = str.search(reg);
alert("result: " + result);

在这里插入图片描述

match()


可以根据正则表达式,从一个字符串中将符合条件的内容提取出来,默认情况下match只会找到第一个符合要求的内容,找到以后就停止检索,我们可以设置正则表达式为全局匹配模式,这样就会匹配到所有的内容。可以为一个正则表达式设置多个匹配模式,且顺序无所谓,match会将匹配到的内容封装到一个数组中返回

var str = "abcxyAbczxaBcbcxyzaECheheabch";
var reg = /a[be]c/ig;

// 将匹配的内容提取出来
var result = str.match(reg);
alert("result: " + result);

在这里插入图片描述

replace()


可以将字符串中指定的内容替换为新的内容默认只会替换匹配到的第一个,可以将正则表达式设置为全局匹配模式,替换全部

var str = "        admin           ";
var regex = /^\s*|\s*$/g;

// 将字符串的左右空格全部替换为空串
var result = str.replace(regex, "");
alert("result: [" + result + "]");

在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章