问题描述
示例字符串:
import { Component } from 'components/components1
Find 字段中使用的正则表达式:
import (\{(.*?)\}) from 'components/(componentgroup|componentgroup2|componentgroup3)
Replace 字段中使用的模式:
import $1 from 'ui/$2
这样我可以选择所有出现的地方,但无法在文本中获得预期的结果。
除了手动,还有其他方法吗?
我也有这个正则表达式,不带括号的匹配:
([^{}\s](?:[^{}]*[^{}\s])?)
解决方法
您的正则表达式很好,尽管您可以在结尾处使用单词边界来编写它以确保将组件作为整个单词匹配:
import (\{(.*?)\}) from 'components/(componentgroup|componentgroup2|componentgroup3)\b
接下来,您的替换模式必须是
import $2 from 'ui/$3
第 2 组,然后是第 3 组。
参见regex demo。
增强版:
import\s+\{\s*(.*?)\s*\}\s+from\s+'components\/(componentgroup|componentgroup2|componentgroup3)\b
替换为 import $1 from 'ui/$2
。
由于 \s*
中的 \{\s*(.*?)\s*\}
,软件包名称将从空格中删除,而 \s+
将确保即使单词之间有任何种类和数量的空格也会发生匹配.注意 Visual Studio Code 正则表达式有点特殊,除非模式中有 \s
或 \r
,否则 \n
不匹配换行符,因此,在这种情况下,\s
不会越界。