如何编写一个匹配除左右括号以外的所有内容的正则表达式

时间:2015-01-03 23:53:50

标签: javascript regex

我正在使用javascript,我正在尝试编写一个正则表达式,除了左右括号和它们之间的任何内容之外的任何内容。在做了一点研究之后,我在Stackoverflow上找到了一个类似的例子。在此特定示例中,以下正则表达式用于匹配除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]?\))(.*)

有人可以告诉我哪里出错了。

3 个答案:

答案 0 :(得分:2)

更明显(对我而言)方法是将String.replace方法与Regex一起使用:

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

但是,如果存在问题,则不包括嵌套括号。在这种情况下,this answer建议使用XRegExp添加在Perl兼容的正则表达式中找到的递归参数。

答案 1 :(得分:1)

这是你正在寻找的东西:

[^\(\)]*

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



input:focus:invalid {
	background:red;
}
input:focus:valid {
	background:green;
}

<input  class="pattern" pattern = "[^\(\)]*" />
&#13;
&#13;
&#13;

答案 2 :(得分:0)

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

试试这个。看看演示。

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