regex 查找具有特定属性的HTML标记并将文本括在大括号中

vc9ivgsu  于 2023-08-08  发布在  其他
关注(0)|答案(2)|浏览(86)

我必须在VsCode中找到任何带有i18n属性的html标记,然后将其静态文本括在大括号内。就像这样:

<p i18n>something</p>
<p i18n>{something | odd}</p>

字符串
我花了几个小时四处寻找可以工作的正则表达式,到目前为止还没有找到。

ruoxqz4g

ruoxqz4g1#

我认为这可能有效(没有经过广泛的测试,如果我犯了任何错误,我不会感到惊讶):
将其放入搜索字段并启用regex搜索模式:(<[^>]+ i18n( [^>]\+)?>)([^<]*)(</\w>)。在替换字段中输入以下内容:$1{$3}$4的值。
如果您想忽略已经有一对内容花括号的内容,那么在搜索字段中使用(<[^>]+ i18n( [^>]\+)?>)([^{][^<]*[^}])(</\w>)

f3temu5u

f3temu5u2#

如果<p>标签包含其他标签,则必须捕获第一个</p>文本之前的所有内容。
如果内容使用(?!\{){开头,则不要选择<p>标记
正则表达式查找:
(<p(?: [^>]+)? i18n(?: [^>]+)?>)(?!\{)(.*?)(</p>)
替换为:
$1{$2}$3
如果您想对<div>标记执行此操作,则此操作不起作用,因为它们可以包含<div>标记。然后你需要一个像 emmet 这样的HTML解析器。
正则表达式查找:
(<div(?: [^>]+)? i18n(?: [^>]+)?>)(?!\{)

  • 在查找小部件中使用光标:Alt_Enter选择所有引用
  • 将所有光标放在所选内容之后:ArrowRight
  • 选择<div>标签的内容:执行命令:** emmet :向外平衡**
  • 删除<div>内容:Ctrl+X
  • 在内容之前键入所需内容:foobar或可能是 emmet 表达式和Tab
  • 粘贴内容:Ctrl+V
  • 在内容后键入所需内容,如果使用 emmet 表达式,请跳过此操作
  • 离开多光标:Esc

相关问题