JavaScript中的正则表达式

含义

正则表达式是构成搜索模式的字符序列,可用于文本的搜索以及文本的替换操作,同时也是一种编程语言所提供的方式,主要是对于字符串的处理

格式

正则表达式中的格式:左右的双斜线(/ xxx /),而内部则是正则表达式,在最后边还可以加上修饰符
比如:

var str = /w3school/i;

其中,/w3school/中的双斜杠内部表示的是一个正则表达式,此处是一串字符串,而i表示的是修饰符,在此处的意思是把搜索的结果变成对大小写不敏感

方法、修饰符以及某范围内的字符

方法的列表

方法描述
search()检索与正则表达式相匹配的值
match()找到一个或多个正则表达式的匹配
replace()替换与正则表达式匹配的子串
split()把字符串分割为字符串数组

RegExp对象的方法

方法描述
compile编译正则表达式
exec检索字符串中指定的值。返回找到的值,并确定其位置
test检索字符串中指定的值。返回 true 或 false

修饰符列表

修饰符描述
i执行对大小写不敏感的匹配
g执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)
m执行多行匹配

某范围内的符号

(1)方括号

表达式描述
[abc]查找方括号之间的任何字符
[^abc]查找任何不在方括号之间的字符
[0~9]查找任何从 0 至 9 的数字
[a-z]查找任何从小写 a 到小写 z 的字符
[A-Z]查找任何从大写 A 到大写 Z 的字符
[adgk]查找给定集合内的任何字符
[^adgk]查找给定集合外的任何字符
(red|blue|green)查找任何指定的选项

(2)元字符

元字符描述
.查找单个字符,除了换行和行结束符
\w查找单词字符
\W查找非单词字符
\d查找数字字符
\D查找非数字字符
\s查找空白字符
\S查找非空白字符
\b匹配单词边界
\B匹配非单词边界
\0查找 NUL 字符
\n查找换行字符
\f查找换页符
\r查找回车符
\t查找制表符
\xxx查找以八进制数 xxx 规定的字符
\xdd查找以十六进制数 dd 规定的字符
\uxxxx查找以十六进制数 xxxx 规定的 Unicode 字符

(3)量词

量词描述
n+匹配任何包含至少一个 n 的字符串
n*匹配任何包含零个或多个 n 的字符串
n?匹配任何包含零个或一个 n 的字符串
n{X}匹配包含 X 个 n 的序列的字符串
n{X,Y}匹配包含 X 至 Y 个 n 的序列的字符串
n{X,}匹配包含至少 X 个 n 的序列的字符串
n$匹配任何结尾为 n 的字符串
^n匹配任何开头为 n 的字符串
?=n匹配任何其后紧接指定字符串 n 的字符串
?!n匹配任何其后没有紧接指定字符串 n 的字符串

match()方法

在字符串内检索指定的值,或者找到一个或多个正则表达式的匹配,其中,返回的是指定的值,而不是字符串的位置,而使用

举个例子:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <h1>正则表达式</h1>
</body>
<script>
    var str="guangdongshneg524265haha";
    document.write("匹配的是单个的数字:"+str.match(/[0-9]/));
    document.write("<br/>");
    document.write("<br/>");
    document.write("匹配的至少一个的数字:"+str.match(/[0-9]+/));
    document.write("<br/>");
    document.write("<br/>");
    document.write("匹配的是不含有'g'的字符:"+str.match(/[^g]+/));
    document.write("<br/>");
    document.write("<br/>");
    document.write("匹配的一个'g'字符:"+str.match(/g{1}/));
    document.write("<br/>");
    document.write("<br/>");
    document.write("匹配的两个'g'字符:"+str.match(/g{2}/));
    document.write("<br/>");
    document.write("<br/>");
    document.write(""+str.match());
</script>
</html>

最后的结果显示是

在这里插入图片描述
除此之外,还能通过使用RegExp来实现:

(1)先通过创建一个字符串

var pat = new RegExp("[0-9]+");

(2)然后将document.write(""+str.match(/[0-9]+/))改成document.write(""+str.match(pat))即可

修改完成之后,在举个例子:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <h1>正则表达式</h1>
</body>
<script>
    var str="guangdongshneg524265haha";
    var pat1 = new  RegExp("[0-9]+");
    var pat2 = new RegExp("[^g]+");
    var pat3 = new RegExp("g{1}");
    var pat4 = new RegExp("g{2}");
    document.write("匹配的至少一个的数字:"+str.match(pat1));
    document.write("<br/>");
    document.write("<br/>");
    document.write("匹配的是不含有'g'的字符:"+str.match(pat2));
    document.write("<br/>");
    document.write("<br/>");
    document.write("匹配的一个'g'字符:"+str.match(pat3));
    document.write("<br/>");
    document.write("<br/>");
    document.write("匹配的两个'g'字符:"+str.match(pat4));
    document.write("<br/>");
    document.write("<br/>");
    document.write(""+str.match());
</script>
</html>

则执行后得到的结果为
效果图

此处也可以用RegExp的方式实现,我就不在出修改执行了

search()方法

使用search()方法对字符串进行搜索时,search() 方法也接受字符串作为搜索参数,当搜索的值找到时,则会返回所在的第一个匹配的位置,如果没有找到任何匹配的子串,则返回 -1

举个例子:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <h1>正则表达式</h1>
</body>
<script>
    var str="Visit W3School! visit W3School! visit w3school!"
    document.write("字符串为:"+str);
    document.write("<br/>");
    document.write("<br/>");
    document.write("通过search方法匹配'W3School'(找到第一个匹配就停止):"+str.search(/W3School/));
    document.write("<br/>");
    document.write("<br/>");
    document.write("通过search方法不区分大小写匹配'W3School'(找到第一个匹配就停止):"+str.search(/W3School/i));
    document.write("<br/>");
    document.write("<br/>");
    document.write("通过search方法匹配'w3school'(找到第一个匹配就停止):"+str.search(/w3school/));
    document.write("<br/>");
    document.write("<br/>");
    document.write("通过search方法不区分大小匹配'w3school'(找到第一个匹配就停止):"+str.search(/w3school/i));
    document.write("<br/>");
    document.write("<br/>");
    document.write("通过search方法匹配'Visit'(找到第一个匹配就停止):"+str.search(/Visit/));
    document.write("<br/>");
    document.write("<br/>");
    document.write("通过search方法不区分大小匹配'Visit'(找到第一个匹配就停止):"+str.search(/Visit/i));
    document.write("<br/>");
    document.write("<br/>");
    document.write("通过search方法匹配'visit'(找到第一个匹配就停止):"+str.search(/visit/));
    document.write("<br/>");
    document.write("<br/>");
    document.write("通过search方法不区分大小匹配'visit'(找到第一个匹配就停止):"+str.search(/visit/i));
</script>
</html>

结果会显示

效果图

split()方法

该方法用于把一个字符串分割成字符串数组,其中,包含有两个变量,第一个变量是我们要对其进行分隔的字符,第二个变量表示的是指定返回的数组的最大长度

举个例子:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <h1>正则表达式</h1>
</body>
<script>
    var str="10:9:8:7:6:5:4:3:2:1";
    document.write("字符串为:"+str);
    document.write("<br/>");
    document.write("<br/>");
    document.write("利用':'将其分别进行隔开成数组"+str.split(":"));
    document.write("<br/>");
    document.write("<br/>");
    document.write("利用':'将其分别进行隔开成数组,设置的最大长度为4:"+str.split(":",4));
</script>
</html>

其中我们将 “:” 做为分隔符,同时,进行了对字符串进行了分隔,最后结果显示为

效果图
但是,如果在中间出现的字符不一样的时候,我们就要使用方括号的部分内容进行对字符的分隔

举个例子:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <h1>正则表达式</h1>
</body>
<script>
    var str="10+9!8/7-6:5*4~3?2%1";
    document.write("字符串为:"+str);
    document.write("<br/>");
    document.write("<br/>");
    document.write("将不一样的符号作为分隔符,分别进行隔开成数组"+str.split(/[^0-9]/));
</script>
</html>

其中,分隔符包含有 “+、!、/、-、:、*、?、%” ,并将字符串分别隔开

显示的结果图如下:

效果图

replace()方法

该方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串,返回的是被替换后的和没有被替换的完整字符串,其中,第一个变量必须是正则表达式,第二个是我么你所需要替换的字符串

举个例子:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <h1>正则表达式</h1>
</body>
<script>
    var str0 = "广东省湛江市雷州市茂德公古城";
    var str1 = "我的家乡在哪里? 在雷州。 那雷州夜景好看的地方在哪里呀?在"+str0 + "。";
    document.write("第一个字符串为:"+str0);
    document.write("<br/>");
    document.write("将“广州市”替换掉“湛江市”:"+str0.replace(/湛江市/,"广州市"));
    document.write("<br/>");
    document.write("<br/>");
    document.write("第二个字符串为:"+str1);
    document.write("<br/>");
    document.write("将所有出现的“雷州”改成“广州”:"+str1.replace(/雷州/g,"广州"));
</script>
</html>

运行后显示的结果
效果图
其中也可以通过RegExp的方法去实现,在这里我就不去实现了

总结

对正则表达式有了很好的了解以及使用,其中的例子可能有部分列举的不是很到位,请多谅解,希望这篇博客能对你们有帮助

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值