JavaScript 正则表达式(慕课网)
正则表达式 - 简介
除非您以前使用过正则表达式,否则您可能不熟悉此术语。但是,毫无疑问,您已经使用过不涉及脚本的某些正则表达式概念。
例如,您很可能使用 ? 和 * 通配符来查找硬盘上的文件。?通配符匹配文件名中的单个字符,而 * 通配符匹配零个或多个字符。像 data?.dat 这样的模式将查找下列文件:
data1.dat data2.dat datax.dat dataN.dat
使用 * 字符代替 ? 字符扩大了找到的文件的数量。data*.dat 匹配下列所有文件:
data.dat data1.dat data2.dat data12.dat datax.dat dataXYZ.dat
正则表达式(英语:Regular Expression,在代码中常简写为regex、regexp或RE)使用单个字符串来描述、匹配一系列符合某个句法规则的字符串搜索模式。
正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。
正则表达式是由一个字符序列形成的搜索模式。
当你在文本中搜索数据时,你可以用搜索模式来描述你要查询的内容。
正则表达式可以是一个简单的字符,或一个更复杂的模式。
正则表达式可用于所有文本搜索和文本替换的操作。
搜索模式可用于文本搜索和文本替换。(查找符合某种规则的字符串无非就是进行条件判断或者就是将原来的文本中符合该规则的字符串用别的字符串进行替换)。
什么是正则表达式?
正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。
- 列目录时, dir *.txt或ls *.txt中的*.txt就不是一个正则表达式,因为这里*与正则式的*的含义是不同的。
- 构造正则表达式的方法和创建数学表达式的方法一样。也就是用多种元字符与运算符可以将小的表达式结合在一起来创建更大的表达式。正则表达式的组件可以是单个的字符、字符集合、字符范围、字符间的选择或者所有这些组件的任意组合。
1.字面量
语法
.
字面量就是将表达式写在两个/之间。var reg=/ is /g;在正则表达式中,表示边界,因此说明我们要查找的is是单词,而不是例如this.
例如:
<body> <script> var reg=/is/ var string="This is my name." var b=string.replace(reg,"IS"); document.write(b); </script> </body>
结果为:
实例:
实例解析:
/w3cschool/i 是一个正则表达式。
w3cschool 是一个模式 (用于检索)。
i 是一个修饰符 (搜索不区分大小写)。
这里可以说i可以是g。
修饰符 | 描述 |
---|---|
i | 执行对大小写不敏感的匹配。 |
g | 执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。 |
m | 执行多行匹配。 |

2.构造函数
这里使用了构造函数,就不需要字面量中的 / /了,即不需要将表达式写在/ /之间了。同时,构造函数传递了两个参数,一个是表达式,另一个是修饰符(i g m)
正则表达式是由普通字符(例如字符 a 到 z)以及特殊字符(称为"元字符")组成的文字模式。模式描述在搜索文本时要匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。
正则表达式的组成:原义文本和元字符
原义字符:需要搜索的字符,比如上例中的is,w3cshoole等等。也就是比如用字面量/ 正则表达式/中,在/ /中的符号,字符等均为原文字符比如/ /d-d /.这里的“-”就时原义字符。比如我们要表示两个数的乘积即a*b,但是在元字符中*表示一个任意字符,该怎么表达呢?这时候就需要用到转义字符\,即* / d*d
需要牢记元字符,在原义文中遇到了和元字符一样的字符,我们只要在其前面加上转义字符符号就可以了。
元字符:
字符类
1.匹配单个字符
一般情况下正则表达式一个字符对应字符串中的一个字符。
例如:/w3cshoole/
2.匹配一类字符([ ])
比如,判断是否是字母,以小写字母为例。这时候,就需要用到[ ]即[a-z]
例:
3.一类字符取反
4.范围类
比如判断某个字符串中是否含有0-9的数字。我们可以用[0123456789],但是可以改写为[0-9]
例如:
查找a-z和A-Z
5.预定义类
6.边界匹配类
例:
这里/@./g中的@.表示@后面的任意一个字符,就是说把@和紧挨着其后面的字符用Q来替换。
7.多行匹配(m的作用)
加上m后,结果如下:
8.量词( { } )
表示多少。
注意:
9.贪婪模式
/d{3,6}/g 本来就是循环3-6次,但是在实际中该怎么替换呢?如下例。尽可能多的匹配。
10.非贪婪模式
11.分组
12.分组
将 年-月-日 替换为 月/日/年
正则表达式属性:
1。正则表达式本身方法
text()
exec方法
2.字符串方法
在 JavaScript 中,正则表达式通常用于两个字符串方法 : search() 和 replace()。
search() 方法 用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串,并返回子字符串的起始位置。
例子:
<p>搜索字符串 "W3cSchool", 并显示匹配的起始位置:</p>
<button onclick="myFunction()">点我</button>
<p id="demo"></p>
<script>
function myFunction() {
var str = "Visit W3cSchool!";
var n = str.search("W3cSchool"); //这里的n为str.search("W3cSchool")返回W3cSchool起始位置值。
document.getElementById("demo").innerHTML = n;
}
</script>
</body>
replace() 方法 用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子字符串。例如:我们通过点击按钮将段落p中的内容改为“hello 你好!!”。
<body>match方法 g对其影响大。
<p id="demo">我是一段好文字</p>
<button onclick="myfunction()">快点我</button>
<script>
function myfunction() {
var str="hello world!";
var n=str.replace("world","你好!"); //解析replace方法:str.replace给定了replace的范围,也就是说给谁替换?replace(“world”,“你好!!”)中,world是在str中要被 替换的字符串,你好!! 是替代world的字符串。str.replace返回的为替代完成后的新的str赋值给n。
document.getElementById("demo").innerHTML=n;
}
</script>
</body>


