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的方法去实现,在这里我就不去实现了
总结
对正则表达式有了很好的了解以及使用,其中的例子可能有部分列举的不是很到位,请多谅解,希望这篇博客能对你们有帮助