给定字符串:
some_function(inputId = "select_something"),
(...)
some_other_function(inputId = "some_other_label")
我想到达:
some_function(inputId = ns("select_something")),
(...)
some_other_function(inputId = ns("some_other_label"))
此处的关键更改是 ns( ... )
元素,它围绕""
inputId
中可用的字符串
到目前为止,我已经提出了这个正则表达式:
:%substitute/\(inputId\s=\s\)\(\"[a-zA-Z]"\)/\1ns(/2/cgI
但是,部署时会产生错误:
E488:尾随字符
该正则表达式的一个更简单的版本可以使用,语法:
:%substitute/\(inputId\s=\s\)/\1ns(/cgI
找到ns(
并创建字符串后,会正确插入 inputId =
some_other_function(inputId = ns("some_other_label")
我努力匹配字符串的剩余部分,例如。 "select_something")
并将其返回为:
"select_something"))。
答案 0 :(得分:1)
你的正则表达式有很多问题。
[a-zA-Z]
只会匹配一个字母。大概你想要匹配下一个"
的所有内容,所以你需要一个\+
,你也需要匹配下划线。我建议\w\+
。除非字符串中可能超过[a-zA-Z_]
,否则我会.\{-}
。
您有/2
而不是\2
。这就是为什么你得到 E488 。
我会这样做:
:%s/\(inputId = \)\(".\{-}\)"/\1ns(\2)/cgI
或使用开始匹配原子:(即\zs
)
:%s/inputId = \zs\".\{-}"/ns(&)/cgI
答案 1 :(得分:1)
您可以使用否定字符类"[^"]*"
来匹配带引号的字符串:
%s/\(inputId\s*=\s*\)\("[^"]*"\)/\1ns(\2)/g