尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Javascript中正则表达式$1探讨
如何将一串数字格式化为逗号表千分位。找到一种使用正则表达的方法一直不太明白。花了点时间将匹配过程记录下来。由于理解能力较差其中的$1着实烧脑了一阵子。有些结论是我测试的结果可能有些偏差请大家斧正。我们先从例子入手将“1234567890”输出为“1,234,567,890javascript代码letstrTemp1234567890.replace(/(\d)(?(\d{3})$)/g,$1,)大家可以试试看到了吧就是这么简单下面分解一下为什么会得到正确的结果。正则表达式为(\d)(?(\d{3})$)里面使用到了下面的元素描述表达式捕获模式(表达式)正向预查模式(?表达式)匹配 n次{n}匹配 1 次或多次最少 m 次最多 n 次匹配{m,n}字符串结尾$匹配数字\d分解一下(\d{3})$是从结尾重复匹配连续的3个数字在此例中等价于(\d{3}){1,3}$1234567890 输出 1234567890相当于234 567 890这三组数字一起输出如果改成(\d{3}){1,1}$1234567890 输出 1234567890(\d{3}){1,2}$1234567890 输出 1234567890下一步重点来了使用正向预查模式(?表达式)输出表达式”(\d{3})$“之前的部分(?(\d{3})$)1234567890 输出三个空位置用x表示 1x234x567x890现在懞圈了吧为什么输出三个x呢因为”为匹配 1 次或多次而(?表达式)匹配一次就输出一次第一次匹配234567890就输出“x234567890前的x。第二次匹配567890就输出“x567890前的x第三次匹配890就输出“x890前的x没有第四次因为再向前匹配只有一个数字1条件不满足了。好了下面只需将所有x代替为,“就行了。可是x仅仅是几个空位置可视化不强所以再做一点变形加上”(\d)“表示为匹配正向预查结果之前的一个数字分别为147(\d)(?(\d{3})$)1234567890 输出1234567890最后用上面的JS语句将1”“4”“7替换为1,”“4,”“7,”就可输出正确结果。到现在为止没有跟$1扯上任何关系各位不慌下面继续展开。letstrTemp1234567890.replace(/(\d)(?(\d{3})$)/g,$1,)上面的”$1“是个什么鬼呢它表示捕获模式下从左向右最后一个(表达式)的匹配结果此例中”$1“是(\d)这没什么可说的我要说的是下面这个表达式中”$1“表示什么(?(\d{3})$)经过我测试正向预查模式”(?表达式)“的输出不是”$1“所以就是它了(\d{3})$但是问题来了你不是说这个会输出三个分别是”890“”567890“”234567890“到底是哪一个经过测试它只输出第一次匹配也就是”890“结论是在匹配 1 次或多次“表达式中虽然结果只是输出最长的匹配”$1根据匹配方向不同结果也不同(\d{3}) 或 ^(\d{3})1234567890 输出1234567890“$1保留最后一次匹配结果789”(\d{3})$1234567890 输出 1234567890“$1保留最后一次匹配结果890”而(\d{3})就比较奇怪了$1似乎有三个结果”123“”456“”789“目前还未有合理的解释。
RELATED

相关推荐

docker容器常用创建命令

docker容器常用创建命令

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/10/24 5:10:57
开源项目亮点:打造你的DIY智能语音助手——“小爱音箱自定义固件”

开源项目亮点:打造你的DIY智能语音助手——“小爱音箱自定义固件”

开源项目亮点:打造你的DIY智能语音助手——“小爱音箱自定义固件” 【免费下载链接】xiaoai-patch Patching for XiaoAi Speakers (小爱音箱), add custom binaries and open source software. Tested on LX06, LX01, LX05, L09A 项目地址: https://gitcode.com/g…

📅 2026/10/24 5:10:57
Windows 无法调整外接显示器分辨率的解决方法

Windows 无法调整外接显示器分辨率的解决方法

记录一个经常会遇到的小问题:在使用外接显式器时,如果使用“仅在 2 上显示”的设置,则 Windows 自动配置的外接显示器分辨率可能是不正确的,导致无法达到最佳显式效果。有的文章说将显示器 2 (也就是外接显示器&#x…

📅 2026/10/24 5:10:57
MORE NEWS

更多资讯

📰

宝塔面板下Aria2安装配置与AriaNg部署完整教程

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

Linux多线程压缩工具选型与实战:xz、zstd、7z、lrzip性能对比

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

原生JS实现锚点定位与Tab跟随:滚动监听、性能优化与移动端适配全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

PCA9422与PIC18F57K42低功耗电源管理方案设计与实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

基于PCA9422与STM32F413的多路电源管理方案实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

LAS点云分类实战:PointNet++训练全流程与语义标签对齐

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬