使用 vim 正则表达式匹配多行 javascript 导入

Matching multiline javascript import using vim regex

我在 js 文件中有这些导入

import { Field } from 'redux-form';
import {
  fullName,
} from '../../../common/helpers/users';

我试图只匹配第二个导入。我尝试使用此搜索

/^import\s{\_.*}\sfrom\s'\.\.\/\.\.\/\.\.\/common\/helpers\/users';$

还有这个使用 \v

/\v^import\s\{\_.*\}\sfrom\s'\.\.\/\.\.\/\.\.\/common\/helpers\/users';

但是这两种正则表达式模式都匹配两个导入(基本上是所有内容)。我怎样才能只匹配第二个?

import {
  fullName,
} from '../../../common/helpers/users'

谢谢!

似乎在第一个表达式中添加换行符会匹配第二个导入语句,但不会匹配第一个。

^import\s{\n\_.*}\sfrom\s'\.\.\/\.\.\/\.\.\/common\/helpers\/users';$

如果您想在换行符之前允许尾随空格,您也可以添加它。

^import\s{\s*\n\_.*}\sfrom\s'\.\.\/\.\.\/\.\.\/common\/helpers\/users';$

你只需要在{后加一个\n:

/^import\s{\n\_.*}\sfrom\s'\.\.\/\.\.\/\.\.\/common\/helpers\/users';$

说明

\_. 匹配任何单个字符或 行尾 ,因此 import 语句在 { 之后有或没有换行符都将匹配。

通过在 { 之后添加 \n,vim 将仅匹配第二种类型的 import 语句。