【问题标题】:match enything except the content between specific tags匹配除特定标签之间的内容之外的任何内容
【发布时间】:2016-08-08 15:23:27
【问题描述】:

我正在为正则表达式匹配而苦苦挣扎。就我而言,我需要选择除特定标签之间的字符之外的所有字符。我的文字看起来像:

Lorem ipsum dolor sit amet [original]don't select this[/original], sit epicuri qualisque id.

'and I want just Lorem ipsum dolor sit amet' + , 'sit epicuri qualisque id' 被选中文本。我尝试选择所有字符而不是排除我的短语,但我不明白。 如果我将它们分组,而不是仅第一次出现有效,但如果存在更多这些标签,我将无法获得所需的结果。

关于如何实现这一点的任何提示?

【问题讨论】:

    标签: regex


    【解决方案1】:

    您可以利用捕获组并在捕获组中获取您想要的所有内容。

    ^((?:(?!\[original\]).)+)\[original\](?:(?!\[\/original\]).)+\[\/original\](.+)$
    

    这会将所有内容放在捕获组 1 中的标记之前,并将所有内容放在捕获组 2 中。整个匹配匹配整行,但标记及其之间的所有内容都不会被捕获到一个组中。

    注意:如果有多个标签,这将不起作用。如果您需要,请编辑您的问题以反映这一点。

    regex101测试

    【讨论】:

    • 谢谢 R Nar,非常接近,蝙蝠你注意到我需要更多标签才能出现在文本中。我修改了问题以反映这一点
    • @bigcat 在那种情况下,我有一种感觉,如果不使用正则表达式会更好地实现。
    • R Nar 有什么想法吗?我需要选定的文本在选择后进行操作,应用过滤器,然后回显它,保持 [原始] 之间的文本不变。任何想法表示赞赏。谢谢
    【解决方案2】:

    正如 R Nar 建议的那样,我使用了另一种方法,正则表达式和拆分/连接的组合来达到预期的结果。

    首先我在 javascript 中使用 split 创建一个单词数组

    let words = input.split(/([original]|[/original])/);

    拆分后,我对所需部分应用转换,转换完成后,我使用 join 方法将所有内容重新组合在一起。

    input = words.join("");

    【讨论】:

      猜你喜欢
      • 2015-05-30
      • 1970-01-01
      • 1970-01-01
      • 2021-03-22
      • 1970-01-01
      • 2018-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多