【问题标题】:Unable to access regex value using different name无法使用不同的名称访问正则表达式值
【发布时间】:2019-12-08 07:58:08
【问题描述】:

我有下面的正则表达式,

const regex = new RegExp('<(.*)>' + text + '<(.*)>');
renderer.setProperty(node, 'innerHTML', node.innerHTML.replace(regex, '<$1>' + replaceText + '<$2>'));

我需要使用'&lt;$open&gt;''&lt;$close&gt;',而不是使用'&lt;$1&gt;''&lt;$2&gt;'

当我尝试更改时,它没有按预期工作。

怎么做?

【问题讨论】:

  • $open$close 是什么意思?
  • new RegExp('&lt;(?&lt;open&gt;.*?)&gt;' + text + '&lt;(?&lt;close&gt;.*?)&gt;')'&lt;$&lt;open&gt;&gt;' &amp; '&lt;$&lt;close&gt;&gt;' 替换
  • 完美。谢谢

标签: javascript regex typescript


【解决方案1】:

您的目标似乎是 ECMAScript 2018+ JS 环境。

您可以使用(?&lt;name&gt;pattern) 在模式中定义named capturing groups,并在替换模式中使用$&lt;name&gt; 命名替换反向引用 来引用使用命名组捕获的字符串。

您也可以使用一些增强代码

const regex = new RegExp('<(?<open>[^>]+)>' + text.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&') + '<(?<close>[^>]+)>');
renderer.setProperty(node, 'innerHTML', node.innerHTML.replace(regex, '<$<open>>' + replaceText.replace(/\$/g, '$$$$') + '<$<close>>'));

注意事项

  • (?&lt;open&gt;[^&gt;]+) 匹配打开标签并将其捕获到 open 命名组中,(?&lt;close&gt;[^&gt;]+) 将关闭标签捕获到 close 命名组中,[^&gt;]+ 模式:除 &gt; 之外的 1 个或多个字符
  • text.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&amp;') 用于转义 text 中的任何特殊字符
  • replaceText.replace(/\$/g, '$$$$') 是正确处理 $1 所必需的,就像替换文本中的文字字符串一样。

【讨论】:

    猜你喜欢
    • 2019-03-30
    • 1970-01-01
    • 2010-09-21
    • 1970-01-01
    • 2011-05-11
    • 2019-08-09
    • 2023-04-09
    相关资源
    最近更新 更多