如何用正则表达式在最后一个字符前插入短横线?
正则实现最后一个字符前插入破折号
要把「Jan104aca」改成「Jan104ac-a」,核心是精准定位最后一个字符前的位置,给你两个简单可行的方案:
方案1:用正向预查定位目标位置
直接用正则 /(?=.$)/ 匹配最后一个字符前的空位,然后把这个位置替换成-就行。
- 正则解释:
(?=.$)是正向预查,意思是“匹配一个位置,这个位置后面紧跟着任意一个字符,且这个字符是字符串的最后一个”,刚好对应你要插入符号的地方。 - 示例代码(以JavaScript为例):
const originalStr = "Jan104aca"; const modifiedStr = originalStr.replace(/(?=.$)/, "-"); console.log(modifiedStr); // 输出:Jan104ac-a
方案2:捕获最后一个字符再重组
如果遇到不支持正向预查的场景,可以用捕获组的方式:
正则用 /(.)$/,替换为 -$1。
- 正则解释:
(.)$会捕获字符串的最后一个字符,$1代表这个捕获到的字符,替换时在它前面加-就完成了修改。 - 示例代码:
const originalStr = "Jan104aca"; const modifiedStr = originalStr.replace(/(.)$/, "-$1"); console.log(modifiedStr); // 输出:Jan104ac-a
你之前写的 /(?<=.)(?!$) 匹配的是所有非开头、非末尾的中间位置,所以会在每个中间空位都插入符号,这不是你要的效果。上面两个方案都能精准定位到目标位置,直接解决问题。
内容的提问来源于stack exchange,提问作者Dennis K.
相关产品推荐
相关产品推荐

