JavaScript正则表达式

学习笔记

Posted by zhangyingji on September 7, 2018

创建

// 使用字面量形式
var expression = / pattern / falgs

// 使用构造函数
var pattern = new RegExp("pattern","flags")

flgs可有一或多个:

  1. g 被应用于所有字符串
  2. i 不区分大小写
  3. m 到达一行末尾时还会继续查找下一行

常用方法

search()

返回第一个与 regexp 相匹配的子串的起始位置

// 搜索指定字符串,不区分大小写
var str = "learning";
var n = str.search(/learn/i); // 0

replace()

var str = "zhang yingji";
var txt = str.replace("yingji","xixi");

test()

验证是否匹配时常用

if(pattern.test(text)) {
    alert("matched")
}

exec()

返回一个数组,第0个元素是与正则表达式相匹配的文本,第1个元素是与RegExpObject的第1个子表达式相匹配的文本(如果有的话)。如果未找到匹配,则返回值为 null

var str = "I love learning";
var reg = /learn/;
var result = reg.exec(str);
console.log(result);
// [ 'learn', index: 7, input: 'I love learning', groups: undefined ]

正则表达式模式

  • 方括号用于查找某个范围内的字符:
[abc] 查找[]内的任意字符
[^abc] 查到任何不在[]内的字符
[0-9] 查找任何0到9的数字 \d
(x|y) 查找任何指定的选项
  • 元字符
# 元字符需要转义:([{\^$|)>*+.]}
\0 查找NULL
\b 匹配单词边界     \B 非
\d 查找数字     \D 
\n 查找换行符
\r 查找回车符
\s 查找空白字符     \S 
\w 查找单词字符     \W
# 单词字符包括:a-z、A-Z、0-9,以及下划线, 包含 _ (下划线) 字符。

\xxx    查找以八进制数 xxx 规定的字符
\xdd    查找以十六进制数 dd 规定的字符
\uxxxx 查找以十六进制数 xxxx 规定的 Unicode 字符
  • 量词
n+ 匹配任何包含至少一个 n 的字符串
n* 匹配任何包含零个或多个 n 的字符串
n? 匹配任何包含零个或一个 n 的字符串
n{x} x个n
n{x,y} n 连续出现至少 X 次,至多 Y 次时匹配
^n 以n开头的字符串
n$ 以n结尾的字符串
?=n 匹配任何其后紧接指定字符串 n 的字符串        ?!n 非

实例

判断钱

const moneyReg = /^(([1-9][0-9]?|0)\.\d+$)|^([1-9][0-9]?|0)$/

// 保留到小数两位
const moneyReg = /^(([^0][0-9]?|0)\.([0-9]{1,2})$)|^([^0][0-9]?|0)$/

判断输入是否为数字、字母、下划线组成

function isValid(str) { 
    return /^\w+$/.test(str); 
}

判断字符串是否全部为字母/数字/中文

function isLetter(str){
    // 字母
    return /^[a-zA-Z]+$/.test(str);
    // 数字
    // return /^\d+$/.test(str);
    // 中文
    // return /^[\u4E00-\u9FA5]{2,4}$/.test(str);
}

判断是否由8位数字组成

function isEigNum(str) { 
    return /^\d{8}$/.test(str); 
}

判断是否有小数

function isDecimal(str){
    return /^\d+\.\d+$/.test(str);
}

校验电话号码、手机号码格式

function isTel(str) { 
    return /^((0\d{2,3}-)?\d{7,8})|(1[3|4|5|7|8][0-9]\d{8})$/.test(str); 
}

校验邮件地址

function isMail(str) { 
    return /^\w+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/.test(str); 
}

检验IP地址的合法性

// (1~255).(0~255).(0~255).(0~255)
function isValidIP(ip) {
    // 1位或2位|1xx|200~249|250~255
    var reg =  /^(\d{1,2}|1\d{2}|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d{2}|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d{2}|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d{2}|2[0-4]\d|25[0-5])$/
    
    return reg.test(ip);   
}  

获取URL参数

function getParams () {
    let str = window.location.href.split('?')[1];
    let arr = str.split('&');
    let params = {};
    for (let i = 0; i < arr.length; i++) {
        params[arr[i].split('=')[0]] = arr[i].split('=')[1];
    }
    return params;
}