@Author:Outman
@Date:2023-01-30
常用正则表达式
/**
* 1.字面量,匹配一个具体字符,包括不用转义的和需要转义的。
* 比如a匹配字符"a",又比如\n匹配换行符,又比如\.匹配小数点。
*
* 2.字符组,匹配一个字符,可以是多种可能之一,比如[0-9],表示匹配一个数字。也有\d的简写形式。
* 另外还有反义字符组,表示可以是除了特定字符之外任何一个字符,比如[^0-9],表示一个非数字字符,也有\D的简写形式。
*
* 3.量词,表示一个字符连续出现,比如a{1,3}表示“a”字符连续出现3次。
* 另外还有常见的简写形式,比如a+表示“a”字符连续出现至少一次。
*
* 4.锚点,匹配一个位置,而不是字符。
* 比如^匹配字符串的开头,又比如\b匹配单词边界,又比如(?=\d)表示数字前面的位置。
*
* 5.分组,用括号表示一个整体,
* 比如(ab)+,表示"ab"两个字符连续出现多次,也可以使用非捕获分组(?:ab)+。
*
* 6.分支,多个子表达式多选一,
* 比如abc|bcd,表达式匹配"abc"或者"bcd"字符子串。
*
* 7.反向引用,比如\2,表示引用第2个分组。
*/
// 匹配16进制颜色值 → #affe1e
var REG_H_COLOR = /#([0-9a-fA-F]{6}|[0-9a-fA-F]{3})/g;
// console.log(REG_H_COLOR.test('#affe1e'));
// 匹配24小时制时分 → 12:21
var REG_24HOUR_TIME = /^([01][0-9]|[2][0-3]):[0-5][0-9]$/;
// console.log(REG_24HOUR_TIME.test('09:01'));
// 匹配24小时制时分(可忽略前置0) → 9:1
var REG_24HOUR_TIME_OVER_ZERO =
/^(0?[0-9]|1[0-9]|[2][0-3]):(0?[0-9]|[1-5][0-9])$/;
// console.log(REG_24HOUR_TIME_OVER_ZERO.test('9:1'));
// 匹配日期(yyyy-mm-dd格式) → 2023-01-29
var REG_DATE_YYYY_MM_DD = /^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$/;
// console.log(REG_DATE_YYYY_MM_DD.test('2023-01-29'));
// 匹配元素的id
var REG_EL_ID = /id="[^"]*"/;
// console.log('<div id="container" class="main"></div>'.match(REG_EL_ID)[0]);
// 替换千位分隔符
var REG_THOUSAND_SEP = /(?!^)(?=(\d{3})+$)/g;
// console.log('111111'.replace(REG_THOUSAND_SEP,','));
// 验证密码(长度6-12位,由数字、小写字符和大写字母组成)
var REG_PWD = /^[0-9A-Za-z]{6,12}$/;
// console.log(REG_PWD.test('Outman123'));
// 验证密码(长度6-12位,由数字、小写字符和大写字母组成,必须至少包括2种字符)
var REG_PWD_INC =
/((?=.*[0-9])(?=.*[a-z])|(?=.*[0-9])(?=.*[A-Z])|(?=.*[a-z])(?=.*[A-Z]))^[0-9A-Za-z]{6,12}$/;
// console.log(REG_PWD_INC.test('Outman123'));
// 匹配成对标签
var REG_PAIR_TAG = /<([^>]+)>[\d\D]*<\/\1>/;
// console.log(REG_PAIR_TAG.test("<div> outman </div>"));
// 去掉字符串的开头和结尾的空白符
function FUNC_TRIM(str) {
return str.replace(/^\s*(.*?)\s*$/g, "$1");
}
// console.log(trim(" outman "));
// 将单词的首字母转换为大写
function FUNC_TITLEIZE(str) {
return str.toLowerCase().replace(/(?:^|\s)\w/g, function (c) {
return c.toUpperCase();
});
}
// console.log(FUNC_TITLEIZE("outman chen"));
// 将单词驼峰化
function FUNC_CAMELIZE(str) {
return str.replace(/[-_\s]+(.)?/g, function (match, c) {
return c ? c.toUpperCase() : "";
});
}
// console.log(FUNC_CAMELIZE("-outman-chen"));
// 将单词中划线化
function FUNC_DASHERIZE(str) {
return str
.replace(/([A-Z])/g, "-$1")
.replace(/[-_\s]+/g, "-")
.toLowerCase();
}
// console.log(FUNC_DASHERIZE("OutmanChen"));
// 实体字符转换为等值的HTML
function FUNC_UNESCAPE_HTML(str) {
var htmlEntities = {
nbsp: " ",
cent: "¢",
pound: "£",
yen: "¥",
euro: "€",
copy: "©",
reg: "®",
lt: "<",
gt: ">",
quot: '"',
amp: "&",
apos: "'",
};
return str.replace(/\&([^;]+);/g, function (match, key) {
if (key in htmlEntities) {
return htmlEntities[key];
}
return match;
});
}
// console.log(FUNC_UNESCAPE_HTML("<div>Blah blah blah</div>"));
// 元字符转义
var REG_META_CHAR = /\^\$\.\*\+\?\|\\\/\[\]\{\}\=\!\:\-\,/;
// console.log(REG_META_CHAR.test("^$.*+?|\\/[]{}=!:-,"));
// 匹配身份证号码
var REG_ID_NUMBER = /^(\d{15}|\d{17}[\dxX])$/;
// console.log(REG_ID_NUMBER.test('33023519770321119X'));
// 匹配IPV4地址 0.0.0.0 ~ 255.255.255.255
var REG_IPV4_NUMBER = /^((0{0,2}\d|0?\d{2}|1\d{2}|2[0-4]\d|25[0-5])\.){3}(0{0,2}\d|0?\d{2}|1\d{2}|2[0-4]\d|25[0-5])$/;
// console.log(REG_IPV4_NUMBER.test('192.168.207.1'));
// 匹配座机号码 (0577)4008833833
var REG_TEL_BRACKET = /^\(0\d{2,3}\)[1-9]\d{6,7}$/;
// console.log(REG_TEL_BRACKET.test('(0577)40088338'));
// 匹配浮点数 1.23、+1.23、-1.23、10、+10、-10、.2、+.2、-.2
var REG_FLOAT_NUMBER = /^[+-]?(\d+)?(\.)?\d+$/;
// console.log(REG_FLOAT_NUMBER.test('-10.23'));