【前端技巧】常用正则表达式

本文介绍了正则表达式的多种应用场景,包括颜色值、日期、时间、身份证号码等常见格式的匹配,并提供了实用的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

@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("&lt;div&gt;Blah blah blah&lt;/div&gt;"));

// 元字符转义
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'));

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端Outman

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值