当前位置:首页 >热点 >15 个常用的正则表达式技巧 我对它根本不感兴趣

15 个常用的正则表达式技巧 我对它根本不感兴趣

2024-06-09 17:35:24 [百科] 来源:避面尹邢网

15 个常用的个常正则表达式技巧

作者:佚名 开发 前端 你对正则表达式有何看法?我猜你会说这太晦涩难懂了,我对它根本不感兴趣。正则是表达的,我曾经和你一样,式技以为我这辈子都学不会了。个常

你对正则表达式有何看法?我猜你会说这太晦涩难懂了,正则我对它根本不感兴趣。表达是式技的,我曾经和你一样,个常以为我这辈子都学不会了。正则

15 个常用的正则表达式技巧 我对它根本不感兴趣

但我们不能否认它确实很强大,表达我在工作中经常使用它,式技今天,个常我总结了15个非常使用的正则技巧想与你一起来分享,同时也希望这对你有所帮助。表达

15 个常用的正则表达式技巧 我对它根本不感兴趣

那么,我们现在就开始吧。

15 个常用的正则表达式技巧 我对它根本不感兴趣

1. 格式化货币

我经常需要格式化货币,它需要遵循以下规则:

123456789 => 123,456,789

123456789.123 => 123,456,789.123

const formatMoney = (money) => {   return money.replace(new RegExp(`(?!^)(?=(\\d{ 3})+${ money.includes('.') ? '\\.' : '$'})`, 'g'), ',')  }formatMoney('123456789') // '123,456,789'formatMoney('123456789.123') // '123,456,789.123'formatMoney('123') // '123'

您可以想象如果没有正则表达式我们将如何做到这一点?

2. Trim功能的两种实现方式

有时我们需要去除字符串的前导和尾随空格,使用正则表达式会非常方便,我想与大家分享至少两种方法。

方式1

const trim1 = (str) => {   return str.replace(/^\s*|\s*$/g, '')    }const string = '   hello medium   'const noSpaceString = 'hello medium'const trimString = trim1(string)console.log(string)console.log(trimString, trimString === noSpaceString)console.log(string)

太好了,我们已经删除了字符串“string”的前导和尾随空格。

方式2

const trim2 = (str) => {   return str.replace(/^\s*(.*?)\s*$/g, '$1')    }const string = '   hello medium   'const noSpaceString = 'hello medium'const trimString = trim2(string)console.log(string)console.log(trimString, trimString === noSpaceString)console.log(string)

通过第二种方式,我们也达到了目的。

3.解析链接上的搜索参数

你一定也经常需要从链接中获取参数吧?

// For example, there is such a link, I hope to get fatfish through getQueryByName('name')// url https://qianlongo.github.io/vue-demos/dist/index.html?name=fatfish&age=100#/homeconst name = getQueryByName('name') // fatfishconst age = getQueryByName('age') // 100

使用正则表达式解决这个问题非常简单。

const getQueryByName = (name) => {   const queryNameRegex = new RegExp(`[?&]${ name}=([^&]*)(&|$)`)  const queryNameMatch = window.location.search.match(queryNameRegex)  // Generally, it will be decoded by decodeURIComponent  return queryNameMatch ? decodeURIComponent(queryNameMatch[1]) : ''}const name = getQueryByName('name')const age = getQueryByName('age')console.log(name, age) // fatfish, 100

4. 驼峰式命名字符串

请将字符串转换为驼峰式大小写,如下所示:

1. foo Bar => fooBar2. foo-bar---- => fooBar3. foo_bar__ => fooBar

我的朋友们,没有什么比正则表达式更好的了。

const camelCase = (string) => {   const camelCaseRegex = /[-_\s]+(.)?/g  return string.replace(camelCaseRegex, (match, char) => {     return char ? char.toUpperCase() : ''  })}console.log(camelCase('foo Bar')) // fooBarconsole.log(camelCase('foo-bar--')) // fooBarconsole.log(camelCase('foo_bar__')) // fooBar

5. 将字符串的第一个字母转换为大写

请将 hello world 转换为 Hello World。

const capitalize = (string) => {   const capitalizeRegex = /(?:^|\s+)\w/g  return string.toLowerCase().replace(capitalizeRegex, (match) => match.toUpperCase())}console.log(capitalize('hello world')) // Hello Worldconsole.log(capitalize('hello WORLD')) // Hello World

6. 转义 HTML

防止 XSS 攻击的方法之一是进行 HTML 转义。 逃逸规则如下:

const escape = (string) => {   const escapeMaps = {     '&': 'amp',    '<': 'lt',    '>': 'gt',    '"': 'quot',    "'": '#39'  }  // The effect here is the same as that of /[&<> "']/g  const escapeRegexp = new RegExp(`[${ Object.keys(escapeMaps).join('')}]`, 'g')  return string.replace(escapeRegexp, (match) => `&${ escapeMaps[match]};`)}console.log(escape(`  <div>    <p>hello world</p>  </div>`))/*<div>  <p>hello world</p></div>*/

8. 取消转义 HTML

const unescape = (string) => {   const unescapeMaps = {     'amp': '&',    'lt': '<',    'gt': '>',    'quot': '"',    '#39': "'"  }  const unescapeRegexp = /&([^;]+);/g  return string.replace(unescapeRegexp, (match, unescapeKey) => {     return unescapeMaps[ unescapeKey ] || match  })}console.log(unescape(`  <div>    <p>hello world</p>  </div>`))/*<div>  <p>hello world</p></div>*/

9. 24小时制比赛时间

请判断时间是否符合24小时制。 匹配规则如下:

01:14

1:14

1:1

23:59

const check24TimeRegexp = /^(?:(?:0?|1)\d|2[0-3]):(?:0?|[1-5])\d$/console.log(check24TimeRegexp.test('01:14')) // trueconsole.log(check24TimeRegexp.test('23:59')) // trueconsole.log(check24TimeRegexp.test('23:60')) // falseconsole.log(check24TimeRegexp.test('1:14')) // trueconsole.log(check24TimeRegexp.test('1:1')) // true

10.匹配日期格式

请匹配日期格式,例如(yyyy-mm-dd、yyyy.mm.dd、yyyy/mm/dd),例如 2021–08–22、2021.08.22、2021/08/22。

const checkDateRegexp = /^\d{ 4}([-\.\/])(?:0[1-9]|1[0-2])\1(?:0[1-9]|[12]\d|3[01])$/console.log(checkDateRegexp.test('2021-08-22')) // trueconsole.log(checkDateRegexp.test('2021/08/22')) // trueconsole.log(checkDateRegexp.test('2021.08.22')) // trueconsole.log(checkDateRegexp.test('2021.08/22')) // falseconsole.log(checkDateRegexp.test('2021/08-22')) // false

11. 匹配十六进制颜色值

请从字符串中获取十六进制颜色值。

const matchColorRegex = /#(?:[\da-fA-F]{ 6}|[\da-fA-F]{ 3})/gconst colorString = '#12f3a1 #ffBabd #FFF #123 #586'console.log(colorString.match(matchColorRegex))// [ '#12f3a1', '#ffBabd', '#FFF', '#123', '#586' ]

12. 检查URL的前缀是HTTPS还是HTTP

const checkProtocol = /^https?:/console.log(checkProtocol.test('https://medium.com/')) // trueconsole.log(checkProtocol.test('http://medium.com/')) // trueconsole.log(checkProtocol.test('//medium.com/')) // false

13.请检查版本号是否正确

版本号必须采用 x.y.z 格式,其中 XYZ 至少为一位数字。

// x.y.zconst versionRegexp = /^(?:\d+\.){ 2}\d+$/console.log(versionRegexp.test('1.1.1'))console.log(versionRegexp.test('1.000.1'))console.log(versionRegexp.test('1.000.1.1'))

14、获取网页上所有img标签的图片地址

const matchImgs = (sHtml) => {   const imgUrlRegex = /<img[^>]+src="((?:https?:)?\/\/[^"]+)"[^>]*?>/gi  let matchImgUrls = []  sHtml.replace(imgUrlRegex, (match, $1) => {     $1 && matchImgUrls.push($1)  })  return matchImgUrls}console.log(matchImgs(document.body.innerHTML))

15、按照3-4-4格式划分电话号码

let mobile = '13312345678' let mobileReg = /(?=(\d{ 4})+$)/g console.log(mobile.replace(mobileReg, '-')) // 133-1234-5678



责任编辑:华轩 来源: web前端开发 技巧开发

(责任编辑:综合)

    推荐文章
    • 10月安徽经济运行总体平稳 新兴动能不断增强

      10月安徽经济运行总体平稳 新兴动能不断增强安徽省统计局近日发布信息,今年10月份,我省整体经济继续保持恢复态势,主要宏观指标增速符合预期、快于全国,新兴动能不断增强。10月份,全省规模以上工业增加值同比增长3%,两年平均增长5.7%、比全国高 ...[详细]
    • 从一款机场小程序看春节智慧出行

      从一款机场小程序看春节智慧出行3年之前,也就是2019年的1月份,春运大潮还没有真正袭来,人们生活的字典里还没有疫情相关的字眼,长期从事金融研究的经济学家李迅雷发表了一篇文章《中国有多少人没有坐过飞机——探讨扩内需的路径》后,引起 ...[详细]
    • 沃尔玛悄悄进军元宇宙

      沃尔玛悄悄进军元宇宙据CNBC周一报道,沃尔玛正在进入元宇宙,并计划创建自己的加密货币和NFT。根据美国专利与商标局,沃尔玛在去年12月30日提交商标申请,这些新商标显示该公司有意制造和销售虚拟商品,包括电子产品、居家用 ...[详细]
    • 2K价位段买什么?看这四款手机就够了 最低1999拿下 -

      2K价位段买什么?看这四款手机就够了 最低1999拿下 -【手机中国导购】要说哪个价位段的手机卷的厉害,相信大部分人第一反应都是2000元价位段。毕竟很大一部分人换机预算就是2000元左右,这就导致各大厂商在这个价位段“卷”得厉害,不是“拍照神机”就是“游戏 ...[详细]
    • 分期乐还不起了怎么办 具体解决方法有哪些?

      分期乐还不起了怎么办 具体解决方法有哪些?很多人急需资金周转会去借网贷,其中分期乐有不少人都用过,这款分期购物平台能为用户提供分期信用消费贷款。借了分期乐是必须要按时还款的,可也有不少人没有能力去还。那么分期乐还不起了怎么办?这里给大家介绍下 ...[详细]
    • 夏天来了不用怕!一加Ace领衔四款搭载“神U”的“真香机” -

      夏天来了不用怕!一加Ace领衔四款搭载“神U”的“真香机” -【手机中国导购】不知不觉中,夏天已经开始到来,气温的不断升高,使许多人开始换上了短袖裙子以获得更多的清凉。而除了人们需要面对日渐炎热的夏天外,还有一个东西也要面临着炎热夏季的考验,那就是日夜陪伴着我们 ...[详细]
    • 中保研公布8款车型C-

      中保研公布8款车型C-【CNMO新闻】近日,中保研汽车技术研究试验中心北京)有限公司以下简称“试验中心”)依据中国保险汽车安全指数以下简称“C-IASI”)2020版规程对8款车型进行了测评并发布测评结果,其中包括丰田赛那 ...[详细]
    • 外媒评出40多款年度最具影响力游戏 你玩过几个? -

      外媒评出40多款年度最具影响力游戏 你玩过几个? -【CNMO新闻】近日,CNMO注意到,国外娱乐科技记者Jordan Minor最近出了一本书,评选1977年至今40多款最有影响力的年度游戏2021年除外),集合了每年最佳、最具开拓性、最奇特的电子游 ...[详细]
    • 非凡中国(08032.HK)因购股权获行使发行2000万股 每股发行价港币0.478元

      非凡中国(08032.HK)因购股权获行使发行2000万股 每股发行价港币0.478元非凡中国(08032.HK)发布公告,2021年3月15日-3月16日,根据公司于2010年6月29日采纳的购股权计划,非公司董事的购股权持有人因行使所获授予的购股权而获合计发行2000万股股份,每股 ...[详细]
    • 外媒:苹果更重视iOS 17的实用性 而不是带来新功能 -

      外媒:苹果更重视iOS 17的实用性 而不是带来新功能 -【手机中国新闻】在前不久的WWDC大会上,苹果iOS 17正式登场,带来了数百项更新,不过苹果并未承诺会立即推送某些新功能,只能后续慢慢推送。有外媒认为,近年来,苹果一直在努力改进其软件版本,不过苹果 ...[详细]
    热点阅读