【问题标题】:How can I use Javascript RegExp to escape brackets? [duplicate]如何使用 Javascript RegExp 转义括号? [复制]
【发布时间】:2017-01-26 07:35:09
【问题描述】:

我尝试使用以下正则表达式来转义括号和里面的东西。 这是示例字符串:

hjdsoghbesi (saeogbesor) serogberso ersberawsewf(edsrgb) sfdrobersb ouersber

我希望结果代码是

hjdsoghbesi serogberso ersberawsewf sfdrobersb ouersber

我尝试使用以下内容:

myString.replace(/\(.*\)/g,"")

但是,这集中在第一个开括号和最后一个闭括号上,并给了我:

hjdsoghbesi sfdrobersb ouersber

我怎样才能达到我想要的结果?

如果您打算回答,请告诉我为什么您的 RegExp 可以达到我的目的,因为我不熟悉 RegExp。

【问题讨论】:

  • 逃跑是什么意思?你的意思是删除?
  • 当您的正则表达式不起作用时,尝试使用在线正则表达式测试器(例如 regex101)总是一个好主意。除了测试您的正则表达式之外,它还会以人类的方式向您描述它。在这种情况下,* 的描述为:量词:* 介于零和无限次之间,尽可能多地,按需回馈 [贪婪]

标签: javascript regex


【解决方案1】:

除了 Oriol 的回答之外,我还看到了以下可能性。使用[^\)] 而不是.myString.replace(/\([^\)]*\)/g,"")[^\)] 匹配除) 之外的所有字符。 [] 列出匹配的字符,^ 在此时反转它们,以便匹配除列出的字符之外的所有字符。

【讨论】:

  • 无需转义字符集中的)
【解决方案2】:

使用非贪心量词:

var str = "hjdsoghbesi (saeogbesor) serogberso ersberawsewf(edsrgb) sfdrobersb ouersber";
console.log(str.replace(/\(.*?\)/g, ""));

* 是贪心的,它会匹配尽可能多的字符。

*? 比较懒,会尽量少匹配。

【讨论】:

  • 我看到你使用了“?”以防止出现问题。你能解释一下为什么会这样吗?
  • 嵌套括号怎么样?
  • @stdob——我假设没有嵌套。无论如何,正则表达式无法处理任意深度的嵌套。
  • 你能解释一下为什么会这样吗?会这样是因为*?告诉它这样做。
猜你喜欢
  • 2011-08-17
  • 2015-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-14
  • 2023-04-01
  • 2013-11-03
  • 2019-10-27
相关资源
最近更新 更多