Files
knowledge-kit/Chapter2 - Web FrontEnd/2.2.md
2020-02-25 17:46:51 +08:00

95 lines
2.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 正则表达式
* \d :匹配一个数字
* \w : 匹配任意一个字母或数字
* . : 可以匹配任意字符串
* \* : 可以匹配任意个字符包括0个
* +: 至少一个字符
* ? : 表示0个或1个字符
* {n} :表示n个字符
* {n-m} : 表示n-m个字符
* \[ \] :表示范围
* \[0-9a-zA-Z\\_\] : 可以匹配一个数字、字母或者下划线
* \[0-9a-zA-Z\\_\]+: 可以匹配至少由一个数字、字母或者下划线组成的字符串
* \[0-9a-zA-Z\_$\]\[0-9a-zA-Z\_\_$\]\* : 可以匹配由数字、字母或者下划线,后接任意个由一个数字、字母或者下划线、$组成的字符串
# RegExp
JS有2种方式创建一个正则表达式。
第一种方式是直接通过/正则表达式/写出来。
第二种 是通过new RegExp\('正则表达式'\)创建一个RegExp对象。
#### 注意
因为第二种的写法问题,所以每个`\` 需要转义,也就是 `\\`
```
<script>
function test(){
var node = document.getElementById("validate").value;
var regStr = /^[0-9a-zA-Z]{3,8}\s*\d[3-8]*$/;
var regStr2 = new RegExp('^[0-9a-zA-Z]{3,8}\\s*\\d[3-8]*$');
console.log(regStr2.test(node));
}
</script>
<input type="text" placeholder="请输入" id="validate" />
<button onclick="test()">检测</button>
```
# 分组
除了简单地判断是否匹配外,正则表达式还可以用来提取分组 ,用 `()`
```
<script>
function test(){
var node = document.getElementById("validate").value;
var regStr = /^(\d{3})-(\d{3,8})$/;
var regStr2 = new RegExp('^(\\d{3})-(\\d{3,8})$');
console.log(regStr2.exec(node));
}
</script>
<input type="text" placeholder="请输入" id="validate" />
<button onclick="test()">检测</button>
```
* 如果正则表达式中定义了组就可以在RegExp对象上用exec\(\)方法提取出子串来。
* exec\(\)方法在匹配成功后会返回一个Array第一个元素为正则表达式匹配到的整个字符串后面的元素则表示匹配成功的子串。
* exec\(\)方法在匹配失败后会返回null
# 贪婪匹配
由于 正则表达式默认使用贪婪匹配模式,因此会造成一些问题。比如
```
var res = /^(\d+)(0*)$/;
res.exec('102300'); //['102300','102300','']
```
由于\d+采用贪婪匹配模式所以会匹配到后面的0所以加上\d+?代表使用非贪婪匹配模式
```
var res = /^(\d+?)(0*)$/;
res.exec('102300');
```