2013-02-07 23 views
0
fadjfl (10) fdaf 
fadjfl dafhaj (10) 
fadjfl dafhaj 34 (10) 
fadjfl dafhaj 34 dafads  (10) 
fadjfl dafhaj 34 dafa(ds) (( (10) 
fadjfl 
fadjfl dafhaj 
fadjfl dafhaj 34 
fadjfl dafhaj 34 dafads  
fadjfl dafhaj 34 dafa(ds) ((

我需要的正则表达式,将选择一切,但(10)比赛的一切,但( d )

+1

你用什么工具? (在这种情况下,它尤其重要) – JDB

+0

我需要它在javascript – user1750290

回答

3

如果您没有提出有关正则表达式的理论问题,那么您应该始终指定一个实现(PHP,Javascript,.NET等),无论如何,这些问题可能属于cs.stackexchange.com。

为了虽然开始你了,如果你只希望\(\d+\)前的字符串,然后:

(.*?)(?:\(\d+\)|$) 

如果你想要的一切,那么这是不是真的有可能,如果你可以有多个括号中的数字。有可能是有限的数字,例如,例如 3:

(.*?)(?:\(\d+\)|$)(.*?)(?:\(\d+\)|$)(.*?)(?:\(\d+\)|$) 

除非你使用.NET:

((.*?)(?:\(\d+\)|$))* 

,您可以循环的 GroupCollection

+0

+1一种通用方法,可用于大多数引擎,尽管它需要额外的代码来提取匹配。 – JDB

1

如果你的意思是你想从每个排队的开头匹配,直到"(10)"在然后结束每一行,并假设你正在使用能够lookaheads一个工具,你可以使用这样的事情:

.*?(?=\(10\)|$) 

它会匹配一切直到以下字符"(10)"(但不会t包括"(10)")或到达行末。在这种情况下使用非贪婪量词(.*?)非常重要,否则正则表达式将每次匹配整行。

如果你的意思是你想除了"(10)"那么你可以很容易地使用任何类型的字符串替换功能,与""更换"(10)"整个文档匹配。

+0

尝试过这个但它不适用于例如fasjfl和以下 – user1750290

+0

@ user1750290 - 更新 – JDB

1

match()东西不是将是非常comlicated。相反,只是删除你不想要的部分:

myStr.replace(/\(\d+\)/, "") 
myStr.split(/\(\d+\)/)