寻找和替换子匹配数学? ?

%s@{fileID: \(213[0-9]*\)@\='{fileID: '.(submatch(1)-1900)@

我在 vim 中使用这个正则表达式搜索和替换命令从每个匹配的 id 中减去一个常量。

我可以在 VSCode 中做正则表达式查找,但是我怎样才能参考 submatch的数学和替换?submatch(1)在 VSCode 中不工作?

谢谢。

269136 次浏览

给定一个(foobar)的正则表达式,如果在replace输入字段中有更多组,则可以使用$1引用第一个组,以此类推。

用一个例子来补充本杰明的回答:

Find        Carrots(With)Dip(Are)Yummy
Replace     Bananas$1Mustard$2Gross
Result      BananasWithMustardAreGross

括号中的任何内容都可以是正则表达式。

再举一个例子:

我正在替换img html标签中的src attr,但我只需要替换src,并保留img声明和src属性之间的任何文本。

我使用查找+替换工具(ctrl+h)如图所示: 查找并替换 < / p >

在我的例子中,1美元行不通,但0美元就可以了。

在这种情况下,我试图用正确的格式替换字符串,在Laravel中翻译它们,我希望这对其他人有用,因为我花了一段时间来整理它!

Search: (?<=<div>).*?(?=</div>)
Replace: \{\{ __('$0') }}

Regex Replace String for Laravel Translation

另一个简单的例子:

Search: style="(.+?)"
Replace: css={css`$1`}

有用的转换HTML到JSX与情感/css!

对于初学者来说,公认的答案是正确的,但如果您不熟悉VSC或Regex,则有点简短。

所以,如果这是你第一次和他们接触:

要查找和修改文本,

  1. 在“Find”步骤中,您可以使用带有“捕获组”的正则表达式,例如I want to find (group1) and (group2),使用括号。这将找到与I want to find group1 and group2相同的文本,但区别在于你可以在下一步中引用group1group2:

  2. 在“Replace”步骤中,您可以通过$1$2等引用捕获组,因此您可以将语句更改为I found $1 and $2 having a picnic,这将输出I found group1 and group2 having a picnic.

注:

  • 而不仅仅是字符串,()内部或外部的任何东西都可以是正则表达式。

  • $0指的是整个匹配

又一个让人想明白的例子。

在本例中,我将####添加到字符串的开头,并将第一个组$1放在后面。组(.*)之外的所有内容都将被删除。

<h4.*">(.*)</h4>
#### $1

enter image description here

# before:
<h4 id="extract-inline-json-with-regex">Extract inline JSON data with Regex</h4>


# after:
#### Extract inline JSON data with Regex