首页 > 解决方案 > 如何用正则表达式替换所有出现

问题描述

我有一个package.json和一些依赖版本是:

...
"dependencies": {
    "@octopol/common": "workspace:packages/common",
  }
...

例如,我想将所有这些 ( workspace:packages/<something>) 版本替换为1.0.0.

我试过这个:

`"@octopol/common": "workspace:packages/common","@octopol/aa": "workspace:packages/aa",`
.replace(/(workspace:packages\/(.*))/g, "1.0.0")

我期待得到:

"@octopol/common": "1.0.0","@octopol/aa": "1.0.0",

但结果是:

'"@octopol/common": "1.0.0'

我在这里想念什么?

标签: javascriptregex

解决方案


匹配到行尾,并且由于您的.*输入是单行,因此/(workspace:packages\/(.*))/g匹配workspace:packages/,然后匹配除换行符之外的任何零个或多个字符,尽可能多,直到行尾。你需要以某种方式缓和点。

一个可能的解决方案看起来像

console.log(
    `"@octopol/common": "workspace:packages/common","@octopol/aa": "workspace:packages/aa",`
.replace(/workspace:packages\/[^"]*/g, "1.0.0")
);

在哪里workspace:packages\/[^"]*匹配

  • workspace:packages\/-workspace:packages/字符串
  • [^"]*- 除 . 之外的零个或多个字符"

如果要替换的部分不能包含空格,您可以进一步将模式精确为/workspace:packages\/[^"\s]*/g.

请参阅正则表达式演示


推荐阅读