用于闭括号的 JavaScript 正则表达式

标签 javascript regex

我正在尝试编写一个正则表达式来根据第一个和最后一个字符拆分输入字符串。

例如

input : "$(tag1)sample$(tag2)"

output : ["$tag1", "sample", "$tag2"]

var input = $(tag1)sample$(tag2);
var splitStrings = input.split(/^$|)$/);

但出现以下错误:

Invalid regular expression: /^$|)$/: Unmatched ')'.

最佳答案

请注意,$) 是特殊的正则表达式元字符 - 如果您需要按字面匹配这些字符 - must be escaped或放入 [...] 字符类中。

但是,在这种情况下,逃避它们对您不起作用。您可以使用 /(\$\([^()]+\))/ 进行拆分,删​​除空条目并删除限定匹配中的括号:

var input = "$(tag1)sample$(tag2)";
var splitStrings = input.split(/(\$\([^()]+\))/);
console.log(
  splitStrings.map(function(x) {
     return x.replace(/^\$\((.*)\)$/, '$$$1');
    }
  ).filter(Boolean)
);

这里的要点是:

  • 使用 (\$\([^()]+\)) 进行拆分,我们得到一个 $(...) 数组以及与此模式不匹配的文本
  • 我们需要从数组中删除通常伴随这种分割操作的空字符串(因此,应该使用 filter(Boolean) 或类似的方法)
  • 我们需要将与拆分匹配的条目中的 $( and ) 替换为 $图案
  • .replace(/^\$\((.*)\)$/, '$$$1') 中,替换有 3 个 $,因为要替换单个 $,我们需要在字符串替换模式中将其加倍,而第三个形成反向引用 $1

关于用于闭括号的 JavaScript 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46033667/

相关文章:

regex - 将多个不同名称的文件重命名为相同名称和不同编号

javascript - 如何在 Javascript 中以正斜杠结束正则表达式

javascript - 文本溢出 :ellipsis doesn't work on in Table cell hyper links

Javascript setAttribute 与 jquery 多属性 setter

javascript - 默认情况下,有人会如何将事件链接内容移动到顶部..

javascript - 正则表达式 - 我不断收到 "Nothing to repeat"异常

javascript - 正则表达式模式 - 语法错误 : invalid regular expression flag b

regex - 查找 HTML5 表单用于验证的正则表达式

正则表达式空白字边界

javascript - 菜单在不同浏览器尺寸下的意外结果