我如何编写一个正则表达式来匹配除左右括号和它们之间的任何内容之外的所有内容

How do I write a regular expression that matches everything except a left and right parenthesis and anything between them

我正在使用 javascript 并且我正在尝试编写一个正则表达式来匹配除左括号和右括号以及它们之间的任何内容之外的任何内容。在做了一些研究之后,我在 Whosebug 上想到了一个类似的例子。在此特定示例中,以下正则表达式用于匹配除 999 之外的任何三位数字。

[(?!999)(\d{3})][1]  

此正则表达式按预期工作,匹配 555、444 或 333,但不匹配 999。

我希望我的正则表达式匹配如下:

John Smith                     =>  John Smith
John Smith (RET)               =>  John Smith
Mr. John Smith's (RET) (1st)   =>  Mr. John Smith's
John William Smith (RET)       =>  John William Smith
John                           =>  John

这是我目前所拥有的,但它不起作用:

(?!\([A-Za-z]?\))(.*)

谁能告诉我哪里做错了。

这是您要找的吗:

[^\(\)]*

我添加了一个插图,其中的输入在有效匹配时变为绿色,在无效匹配时变为红色

input:focus:invalid {
 background:red;
}
input:focus:valid {
 background:green;
}
<input  class="pattern" pattern = "[^\(\)]*" />

一个更明显(对我来说,无论如何)的方法是将 String.replace 方法与正则表达式一起使用:

"John Smith (RET) (1st) SomethingElse".replace(/\([^\)]*\)/g, '');

这不包括嵌套括号,但是,以防出现问题。在这种情况下,this answer suggests using XRegExp 添加在与 Perl 兼容的正则表达式中找到的递归参数。

[^)](?![^(]*\))

尝试 this.See 演示。

https://regex101.com/r/wZ0iA3/1