正则
一、正则的定义方式
var reg = new RegExp("W3School", "g");
var reg = /abc/g;
二、exec、match、test的区别
- exec返回符合要求的数组,参数是要检验的字符串;返回的数组有三个属性:分别是input,index,lastIndex
reg.exec(string)
const reg = /\d+(.\d+)/g
var str = '大米:2.57斤/元,白菜:3.65元/斤';
var arr = reg.exec(str)
console.log(arr[0]) // 2.57
console.log(arr)
// [
// '2.57',
// '.57',
// index: 3,
// input: '大米:2.57斤/元,白菜:3.65元/斤',
// groups: undefined
// ]
<script type="text/javascript">
var str = "Visit W3School";
var patt = new RegExp("W3School","g");
var result;
while ((result = patt.exec(str)) != null) {
document.write(result);
document.write("<br />");
document.write(patt.lastIndex);
}
</script>
输出值:
W3School
14
- match是字符串执行匹配正则表达式规则的方法,他的参数是正则表达式
string.match(reg)
const reg = /\d+(.\d+)/g
var str = '大米:2.57斤/元,白菜:3.65元/斤';
var arr = str.match(reg);
console.log(arr) // [ '2.57', '3.65' ]
exec与全局是否定义无关系,而match则于全局相关联;
当定义为非全局,两者执行结果相同;
const reg = /\d+(.\d+)/
var str = '大米:2.57斤/元,白菜:3.65元/斤';
var arr = str.match(reg);
console.log(arr[0]) // 2.57
var arr1 = reg.exec(str)
console.log(arr1[0]) // 2.57
- test(string): 测试string是否含有匹配结果,返回true和false
const reg = /\d+(.\d+)/
var str = '大米:2.57斤/元,白菜:3.65元/斤';
var arr = reg.test(str);
console.log(arr) // true
三、replace的用法
var str1 = '生于1999年';
var num1 = str1.replace(/[^\d]/g, '');
var num2 = str1.replace(/[\d]/g, '');
console.log(num1) // 1999
console.log(num2) // 生于年
四、创建RegExp对象的语法
new RegExp(pattern, attributes);
attributes有三个值:
g: 全局匹配(查找所有匹配,而非在第一个匹配后停止)
i: 区分大小写的匹配
m: 多行匹配
五、查找范围
语法 | 意义 |
---|---|
[abc] | 查找方括号之间的任何字符 |
[^abc] | 查找任何不在方括号之间的字符 |
[0-9] | 查找任何从 0 至 9 的数字 |
[a-z] | 查找任何从小写 a 到小写 z 的字符 |
[A-z] | 查找任何从大写 A 到小写 z 的字符 |
(red | blue | green) | 查找任何指定的选项 |
元字符 | 意义 |
---|---|
\w | 查找单词字符 |
\W | 查找非单词字符 |
\d | 查找数字 |
\D | 查找非数字字符 |
\s | 查找空白字符 |
\S | 查找非空白字符 |
\b | 匹配单词边界 |
\B | 匹配非单词边界 |
function trim(s) {
return s.replace(/(\s*$)|(^\s*)/g, "");
}
console.log(trim(' weew ')) // weew 前后空格都不在
量词 | 意义 |
---|---|
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 的字符串 |
六、邮箱正则
^[A-z0-9_-]+@[A-z0-9_-]+(\.[A-z0-9_-]+)+$