向数字 XML 属性添加常量值

向数字 XML 属性添加常量值

背景

使用 vim(gvim)向与正则表达式匹配的数字添加一个常量值。

问题

下列正则表达式将匹配width="32"

/width="\([0-9]\{2\}\)"

问题

如何用使用属性值的数学表达式的结果替换属性的数值width?例如,我想执行以下全局替换:

:%s/width="\([0-9]\{2\}\)"/width="\1+10"/g

这将产生width="42"width="32"width="105"width="95"

谢谢你!

答案1

要在替换中进行表达式评估,请参阅:

:help :s\=
:help submatch()

例如:

:%s/width="\([0-9]\{2\}\)"/\='width="'.(submatch(1)+10).'"'/g

进行表达式替换时,整个替换必须是一个表达式,因此必须连接(参见:help expr-.)表达式的三个元素。分解如下:

  • \=

表明替换模式是一个表达式。

  • 'width="'

第一个字符串。

  • (submatch(1) + 10)

将十添加到第一个子模式匹配(括在括号中),这样 Vim 就不会尝试在加法运算中包含前面的字符串。

  • '"'

以字符串形式结束的引号。

(请注意,我没有在细分中包含连接运算符。)

相关内容