【问题标题】:How can I remove all content in brackets except entirely numerical content?除了完全数字内容外,如何删除括号中的所有内容?
【发布时间】:2011-10-18 22:45:45
【问题描述】:

我想获取一个字符串并删除方括号内所有出现的字符:

[foo][foo123bar][123bar] 应删除

但我想保留所有仅由数字组成的括号:

[1][123] 应该保留

我尝试了几件事,但无济于事:

text = text.replace(/\[^[0-9+]\]/gi, "");

text = text.replace(/\[^[\d]\]/gi, "");

【问题讨论】:

  • 请同时添加您使用的语言的标签。
  • 这不起作用吗? text.replace(/\[^[0-9]+\]/gi, ""); 更改了 + 的位置。对不起,它不会,它只会在[]中没有数字字符时替换字符

标签: javascript regex regex-negation


【解决方案1】:

您正在寻找的工具是negative lookahead。以下是您将如何使用它:

text = text.replace(/\[(?!\d+\])[^\[\]]+\]/g, "");

\[ 找到一个左括号后,前瞻,(?!\d+\]) 断言括号不只包含数字。

然后,[^\[\]]+ 匹配任何非方括号,确保(例如)您不会意外匹配“嵌套”括号,例如 [[123]]

最后,\] 匹配右括号。

【讨论】:

  • 谢谢 - 这很有帮助。我知道 \d 应该在某个地方参与。它在行动:jsfiddle.net/QL4UL
  • 太好了,以前从未听说过负前瞻。这就是我喜欢 SO 的原因。
【解决方案2】:

在python中:

import re
text = '[foo] [foo123bar] [123bar] [foo123] [1] [123]'
print re.sub('(\[.*[^0-9]+\])|(\[[^0-9][^\]]*\])', '', text)

【讨论】:

    【解决方案3】:

    你可能需要这个:

    text = text.replace(/\[[^\]]*[^0-9\]][^\]]*\]/gi, "");
    

    说明:您希望将这些序列保留在包含 only 数字的括号内。另一种说法是 删除 那些 1) 括在括号内、2) 不包含右括号和 3) 包含至少一个非数字字符的序列。上面的正则表达式匹配一个左括号(\[),后跟一个任意字符序列,除了右括号([^\]],注意右括号必须被转义),然后是一个非数字字符(也不包括右括号),然后是除右括号外的任意字符序列,然后是右括号。

    【讨论】:

      猜你喜欢
      • 2022-11-03
      • 1970-01-01
      • 2021-04-20
      • 2017-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-27
      • 2019-04-15
      相关资源
      最近更新 更多