20 个你应该掌握的强大而有用的正则表达式-环球今热点
2023-06-12 17:25:37 来源: 清一色财经
一起来了解下20 个你应该掌握的强大而有用的正则表达式都有哪些。
1.货币格式化
我经常需要在工作中使用到格式化的货币,使用正则表达式让这变得非常简单。
const formatPrice = (price) => { const regexp = new RegExp(`(?!^)(?=(\\d{3})+${price.includes(".") ? "\\." : "$"})`, "g") return price.replace(regexp, ",")}formatPrice("123") // 123formatPrice("1234") // 1,234formatPrice("123456") // 123,456formatPrice("123456789") // 123,456,789formatPrice("123456789.123") // 123,456,789.123
你还有什么其他的方法吗?
使用 Intl.NumberFormat 是我最喜欢的方式。
const format = new Intl.NumberFormat("en-US", { style: "currency", currency: "USD"})console.log(format.format(123456789.123)) // $123,456,789.12
修复它的方法不止一种!我有另一种方式让我感到快乐。
const amount = 1234567.89const formatter = new Intl.NumberFormat("en-US", { style: "currency", currency: "USD" })console.log(formatter.format(amount)) // $1,234,567.89
我为什么要学习正则表达式?看起来好复杂!我失去了信心。
请放轻松,我的朋友,您会看到正则表达式的魔力。
2.去除字符串空格的两种方法
如果我想从字符串中删除前导和尾随空格,我该怎么办?
console.log(" medium ".trim())
这很简单,对吧?当然,使用正则表达式,我们至少有两种方法可以搞定。
方案一
const trim = (str) => { return str.replace(/^\s*|\s*$/g, "") }trim(" medium ") // "medium"
方案2
const trim = (str) => { return str.replace(/^\s*(.*?)\s*$/g, "$1") }trim(" medium ") // "medium"
3. 转义 HTML
防止 XSS 攻击的方法之一是进行 HTML 转义。转义规则如下,需要将对应的字符转换成等价的实体。而反转义就是将转义的实体转化为对应的字符
const escape = (string) => { const escapeMaps = { "&": "amp", "<": "lt", ">": "gt", """: "quot", """: "#39" } const escapeRegexp = new RegExp(`[${Object.keys(escapeMaps).join("")}]`, "g") return string.replace(escapeRegexp, (match) => `&${escapeMaps[match]};`)}console.log(escape(` hello world
`))/* hello world
*/
4. 未转义的 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(` hello world
`))/* hello world
*/
5.驼峰化一个字符串
如下规则:把对应的字符串变成驼峰的写法
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
6.将字符串首字母转为大写,其余转为小写
例如,“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
7、获取网页所有图片标签的图片地址
const matchImgs = (sHtml) => { const imgUrlRegex = /]+src="((?:https?:)?\/\/[^"]+)"[^>]*?>/gi let matchImgUrls = [] sHtml.replace(imgUrlRegex, (match, $1) => { $1 && matchImgUrls.push($1) }) return matchImgUrls}matchImgs(document.body.innerHTML)
8、通过名称获取url查询参数
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]) : ""}// 1. name in front// https://medium.com/?name=fatfish&sex=boyconsole.log(getQueryByName("name")) // fatfish// 2. name at the end// https://medium.com//?sex=boy&name=fatfishconsole.log(getQueryByName("name")) // fatfish// 2. name in the middle// https://medium.com//?sex=boy&name=fatfish&age=100console.log(getQueryByName("name")) // fatfish
9、匹配24小时制时间
判断时间是否符合24小时制。
匹配规则如下:
01:141:141:123:59const 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.匹配十六进制颜色值
请从字符串中匹配颜色值,如#ffbbad、#FFF 十六进制
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前缀是否正确
检查 URL 是否以 http 或 https 开头
const checkProtocol = /^https?:/console.log(checkProtocol.test("https://juejin.cn/")) // trueconsole.log(checkProtocol.test("http://juejin.cn/")) // trueconsole.log(checkProtocol.test("//juejin.cn/")) // false
13.反串大小写
我们将反转字符串的大小写,例如,hello WORLD => HELLO world
const stringCaseReverseReg = /[a-z]/igconst string = "hello WORLD"const string2 = string.replace(stringCaseReverseReg, (char) => { const upperStr = char.toUpperCase() return upperStr === char ? char.toLowerCase() : upperStr})console.log(string2) // HELLO world
14、windows下匹配文件夹和文件路径
const windowsPathRegex = /^[a-zA-Z]:\\(?:[^\\:*<>|"?\r\n/]+\\?)*(?:(?:[^\\:*<>|"?\r\n/]+)\.\w+)?$/console.log( windowsPathRegex.test("C:\\Documents\\Newsletters\\Summer2018.pdf") ) // trueconsole.log( windowsPathRegex.test("C:\\Documents\Newsletters\\") ) // trueconsole.log( windowsPathRegex.test("C:\\Documents\Newsletters") ) // trueconsole.log( windowsPathRegex.test("C:\\") ) // true
15.匹配id
请截取“
const matchIdRegexp = /id="([^"]*)"/console.log(` hello world `.match(matchIdRegexp)[1]) // box
16.判断版本是否正确
我们要求版本为 X.Y.Z 格式,其中 XYZ 都是至少一位数的数字
// x.y.zconst versionRegexp = /^(?:\d+\.){2}\d+$/console.log(versionRegexp.test("1.1.1")) // trueconsole.log(versionRegexp.test("1.000.1")) // trueconsole.log(versionRegexp.test("1.000.1.1")) // false
17.判断一个数是否为整数
const intRegex = /^[-+]?\d*$/const num1 = 12345console.log(intRegex.test(num1)) // trueconst num2 = 12345.1console.log(intRegex.test(num2)) // false
18.判断一个数是否为小数
const floatRegex = /^[-\+]?\d+(\.\d+)?$/const num = 1234.5console.log(floatRegex.test(num)) // true
19.判断一个字符串是否只包含字母
const letterRegex = /^[a-zA-Z]+$/const letterStr1 = "fatfish"console.log(letterRegex.test(letterStr1)) // trueconst letterStr2 = "fatfish_frontend"console.log(letterRegex.test(letterStr2)) // false
20.判断URL是否正确
const urlRegexp= /^((https?|ftp|file):\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/;console.log(urlRegexp.test("https://medium.com/")) // true
总结
以上就是我今天想与你分享的20个有关正则表达式的内容,希望对你有所帮助。
标签:
为您推荐
精彩放送
热门文章
-
宁德时代发布重卡换电品牌骐骥换电 |世界速读
-
九洲药业:控股子公司卡马西平缓释片(Ⅱ)获药品注册证书
-
世界关注:亨迪药业:预计上半年净利同比增长84%-139%
-
奥来德:向特定对象发行股票申请获得上海证券交易所审核通过
-
天天亮点!众合科技:控股子公司与浙江省浦江经济开发区管理委员会签署投资框架协议
-
商务部副部长李飞出席中欧世贸组织改革联合工作组第五次会议 |环球百事通
-
迅捷兴:公司在光模块领域已积累了相关产品经验和客户 目前可批量接单 _全球独家
-
梅西将于6月14日亮相淘宝直播 当前快播
-
鼎信通讯:中标1.45亿元重大经营合同
-
潞安环能:5月商品煤销量同比增长13.91% 动态
-
商务部新闻发言人就美财政部以涉伊为由制裁中国实体和个人答记者问
-
黑色家电板块震荡上行,海信视像6%领涨
精彩图片
-
成本大减!新一轮的旗舰大战也将在即将到来的9月正式拉开帷幕
-
博览会开幕 中国首款具有自主知识产权的国产通用型科学计算软件正式发布
-
技术下降!Intel独立显卡驱动一次评测就发现43个Bug
-
高性能的台式机彻底告别“光污染” 雷克沙推出简洁纯白外观设计
-
韩国媒体率先报道:三星电子236层NAND闪存预计年内开始生产 市场竞争更激烈
-
新科技!苹果正在积极研发某种形式的AR/VR头显或智能眼镜
-
谷歌测试开展新功能 向用户展示哪些云流媒体服务拥有特定的视频游戏
-
支付宝积极响应国家为小微降费的政策号召 一年降费让利近80亿
-
京东汽车就与浦林成山旗下新能源车轮胎品牌浦林达成战略合作 助力轮胎“电动化转型”
-
苹果新专利公布:暗示未来 iPhone手机或许有陶瓷材质版
-
盖茨和韩国能源供应商SK共同牵头 其中SK投资2.5亿美元
-
海底捞早已经捞不动了 据统计上半年最高亏损达2.97亿
热文
-
五菱宏光S1怎么样最新评论:外观时尚,省油实用,性价比高!
-
一品红子公司获得盐酸左西替利嗪口服滴剂药品补充申请批准通知书 |全球时讯
-
港股午评:恒指跌0.57% 汽车股持续拉升 |最新资讯
-
2023宜宾中考语文作文题目:材料作文
-
Xbox发布会:《辛特堡传说》宣传片公布 明年发售!|全球速看
-
天天微动态丨充电桩概念震荡走高 天迈科技、华体科技涨停
-
前沿资讯!食品、乳业等消费股震荡回暖 来伊份大涨近7%
-
教育部关于公布第二批国家级一流本科课程认定结果的通知 即时焦点
-
三一重工在河南成立新能源汽车公司_今日精选
-
教育股异动拉升 美吉姆直线封板 |世界报资讯
-
啤酒股异动拉升 永顺泰涨停
-
新动态:海康威视回应英国拟限制安装中国企业监控设备:看到相关新闻 公司在国外政府机构现成的设备不多
-
成都市哪个医院治疗阴道松弛较好-快播报
-
一出现就被全网骂的她,委屈吗?
-
住建部加强城市房屋室内装饰装修安全管理 坚决遏制私拆承重墙等违法违规行为
-
11家股份行跟进下调存款利率 定存利率普遍低于3%
-
观察:光伏概念股持续回暖
-
环球快资讯:国防军工估值接近2020年低点,建议加大配置力度!国防军工ETF(512810)份额悄然创近7年新高!
-
中字头股票震荡走低 中信出版跌超9%
-
世界看点:图表丨暴雨天出行,这份安全指南请收好!
-
乌市27家“新疆少先队校外实践教育基地”授牌|快看
-
海南发布电力需求响应实施方案 通过经济激励措施引导电力用户削峰填谷
-
AI教育反复走强 盛通股份5天3板
-
环球百事通!东方国信:公司有算力储备 已形成训练、推理和算法三位一体的技术能力构建
-
环球滚动:一图读懂 | 助力北京疏解企业高效落户 雄安出台“1+N”行动方案
-
天天观点:国产EDA崛起:华大九天排国内第4,拿下6%份额,实现5nm工艺
-
最简单的酿白酒的方法_最简单的酿白酒方法-世界球精选
-
走进北京人艺 共享戏剧记忆-天天速看料
-
最新快讯!中药板块快速走低 益佰制药触及跌停
-
无人驾驶概念股盘初拉升
-
环球简讯:AMD概念股震荡走强 一博科技涨超10%
-
热议:晶科能源1亿元于山西新设子公司 含电子专用材料制造业务
-
算力租赁板块开盘活跃 拓维信息一字涨停
-
党报摄影日记 | 2023年6月12日 星期一-环球滚动
-
财政部拟发行870亿元2年期国债|热推荐
-
电科太极发布生成式人工智能大模型“小可”|天天快报
-
关于母爱的故事50字简短_关于母爱的故事50字
-
天天时讯:“最热一年”警报拉响!世界“热极”,再遭热浪袭击?!
-
股份行跟进国有大行下调存款利率 三年期、五年期定存降15个基点 |世界快播报
-
巨人网络史玉柱:AI是未来趋势 游戏领域将在两三年内有所作为
-
世界即时看!监管机构进一步规范团体人身险业务 拟划定“负面清单”涉及八项内容
-
上海金融法院赵红:中国特色现代资本市场的 三个“特色”|天天观焦点
-
5月以来约30份罚单落地 监管“剑指”券商私募资管等业务 -环球速读
-
南财研选快讯|民生证券:迎接大模型应用产品升级发布潮
-
今日看点:微软 Xbox 2023 发布会汇总:《星空》最新情报公布
-
全球微速讯:山东荣成:沿海城市“夜经济”火热
-
全球热门:产业艰难寻底 生猪盘面宽幅震荡
-
最美童星长大后惊艳全网!16岁时因“不够性感”被导演刷掉,她霸气怒怼:恶心的猪! 当前快讯
-
就离谱!甜妹竟然成了恶女标配?
-
华润集团发声明:“海外华润CRC”等非集团投资公司 世界百事通