学习之前,多想想为什么要使用正则表达式,有助于理解。
正则表达式 regular expression 使用单个字符串来 描述某个句法规则 ,计算机根据规则去匹配字符串中的内容。
要提取出字符串中'ashx521dasbx34sasdz275dasdzxd897' 中连续的数字,并将结果保存在数组中 ['521', '34', '275', '897']
- /**
- * 使用一个暂时变量tmp保存连续为数值时的字符串,间断后再统一加入数组内;
- * 可能会出现最后一位是数字的情况,所以使用i<=str.length多走一次循环的else路径,将最后一组数组加入数组
- *
- */
- function findNum_two(str) {
- var arr = [];
- var tmp = '';
- // 遍历字符串,取出需要的数字
- for (var i = 0; i <= str.length; i++) {
- if (str.charAt(i) <= '9' && str.charAt(i) >= '0') {
- tmp += str[i];
- } else {
- if (tmp) { // 如果tmp不为空
- arr.push(tmp);
- tmp = '';
- }
- }
- }
- return arr;
- }
- console.log(findNum_two(str)); // [ '521', '34', '275', '897' ]
- function findNum(str) {
- return str.match(/\d+/g);
- }
- console.log(findNum(str)); // [ '521', '34', '275', '897' ]
转义字符:单独使用字母本身有意义;在前面加上 \ 后改变原有意义
用来描述相邻的前面的单个字符匹配规则出现的次数
整个字符类 [0-9a-zA-Z] 只代表一位字符
注意,字符类中的 ^ 表示非的意思,不在某个范围内 : [^\d] 表示非数字的字符
对于复杂的正则表达式,可以使用 () 将其拆分为多个部分, 在 replace(re, fn) 回调函数中可以简化匹配内容的操作
var re = /(\d+)(\w)(\S)/;
fn($0, $1, $2 ...)
主要用于匹配字符串中重复的字符
作用范围只是 ^ 之后的第一个子项; $ 前的第一个子项
主要有 4 中方法用于操作正则表达式:
根据 RegExp 去匹配字符串,如果匹配成功,返回 true ;匹配失败返回 false 。 主要用于逻辑判断
- var str = "abxe2312dafxz";
- var re = /\d+/;
- re.test(str); // true
根据 RegExp 去匹配字符串,返回第一个匹配成功字符串的首字符的索引;匹配失败返回 -1 。 用于查找字符的索引,类似字符串的 indexOf() 方法
根据 RegExp 去匹配字符串,如果匹配成功,将匹配的结果保存在数组中返回;匹配失败返回 null 。 默认第一次匹配后便停止继续匹配,使用修饰符 g 进行全局匹配
根据 RegExp 去匹配字符串,如果匹配成功,将匹配的字符串更换为新的字符串 newstr 。
- var str = 'a23gb';
- var re = /\d+/;
- str.replace(re, "xy"); // 'axygb'
replace() 方法的第二个参数可以是回调函数,其参数是每次匹配成功获取的字符串。每次匹配成功都会执行一次回调函数
- var str = '1231asdaegj71836178asdhasssasalsdhdzxbczaslazxcnnffajshdhgagsgdssssasdzzxda';
- var str = str.split('').sort().join(''); // 按顺序的字符序列
- var re = /(\w)\1+/g;
- var length = 0;
- var val = ''; // 保存出现次数最多的字符
- // $0代表每次匹配到的字符,$1代表第一个正则表达式子项(\w)
- str.replace(re,
- function($0, $1) { // 可以将匹配的字符当做变量操作
- if ($0.length > length) {
- length = $0.length;
- val = $1; // $1代表每次匹配的字符
- }
- });
- console.log(length);
- console.log(val);
- var re = {
- email: /\w+@[a-z0-9]+(\.[a-z]+){1,3}/,
- chinese: /[\u4e00-\u9fa5]/,
- qq: /^[1-9]\d{4,11}$/,
- id: /[1-9]\d{14}|[1-9]\d{17}|[1-9]\d{16}x/i,
- trim: /^\s+|\s+$/
- }
来源: http://www.open-open.com/lib/view/open1489735886757.html