正则表达式提取括号内文本,包括括号

5

有人能帮我写一个正则表达式吗?需要满足以下要求:

  • 必须出现在字符串的结尾
  • 删除括号内(包括括号)的所有字符

这将在JavaScript中完成。

这是我目前的代码 -

var title = $(this).find('title').text().replace(/\w+\s+\(.*?\)/, "");

然而,它似乎捕获了括号外的一些字符。


可能有嵌套的括号?如果是这样,就算了吧。正则表达式无法解析嵌套的分隔符。 - user395760
在另一个正则表达式中,我还需要能够删除<和>字符。 - steve
抓住这个机会 - 冰球选拔赛(2011年1月6日至2011年1月7日) - steve
@delnan 正则表达式可以在更好的 PCRE 变体中解析嵌套,JavaScript 则需要一个小插件来处理。 - Orbling
@Orbling:但那些不是很“正则”的表达式 ;) - user395760
@delnan:主要编程语言现在都使用PCRE实现,已经使用了很多年,没有一种使用正则表达式。它们仍然被称为regexp,人们似乎无法适应这种变化。 - Orbling
3个回答

1

这涉及到括号之间的匹配,仅在字符串结尾处:\([^(]*\)\s*$。如果括号可能嵌套,则需要解析器而不是正则表达式。


0
var title = $(this).find('title').text().replace(/\([^()]*\)\s*$/, "");

应该可以工作。

要删除<>,你不需要正则表达式,但当然你可以使用mystr.replace(/[<>]+/g, "");

这将匹配一个(,除了括号之外的任意数量的字符(从而确保只有最后一个括号会匹配),然后是字符串的结尾。

目前,它允许在括号和字符串结尾之间有空格(并且也会将其删除)。如果不需要这样做,请从正则表达式中删除\s*部分。


谢谢Tim,你能再帮我一个忙吗?在另一个正则表达式中,我还需要能够删除<和>字符,但不需要删除它们之间的字符。 - steve
3:00 下午 - 4:00 下午。它似乎没有捕获尾随符号 < mystr.replace(/[<>]+/, ""); - steve
除非我重新运行正则表达式,否则它会留下一个杂散的<。不确定为什么第一个不能捕获所有实例。 - steve

0

在哪里放置$符号呢?您需要在结尾处添加一个美元符号,并且可能要捕获可选的空格。

var title = $(this).find('title').text().replace(/\s*\([^\)]*?\)\s*$/, "");

如果括号也可以是尖括号,那么这个模式也可以匹配它们:
var title = $(this).find('title').text().replace(/\s*(\([^\)]*?\)|\<[^\>]*?\>)\s*$/, "");

这将仍然从整个字符串的第一个到最后一个括号进行匹配,而不仅仅是最后一对括号。记住最左最长规则-在这种情况下,懒惰量词没有任何区别。 - Tim Pietzcker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接