2013-12-09 79 views
3

我被赋予了一项需要很长时间才能完成的任务。替换除正则表达式组之外的所有东西?

图像说明了一切:

这是我有:(X100次):

enter image description here

,我需要提取此值仅

enter image description here

我如何获取价值?

我有这个正则表达式使它:

DbCommand.*?\("(.*?)"\);

正如你可以看到它的工作:

enter image description here

而且replace功能(replace to $1)我做获得纯价值:

enter image description here

但问题是,我需要值,而不是不匹配组的其他成员:

问题:换句话说:

我怎样才能得到如下纯化结果:

Eservices_Claims_Get_Pending_Claims_List 
Eservices_Claims_Get_Pending_Claims_Step1 

Here is my code at Online regexer

  • 有什么方法可以取代“除了匹配的组以外的所有”吗?

p.s.我知道有这样做的其他方式,但我更喜欢一个正则表达式的解决方案(这也将有助于我更好地理解正则表达式)

+0

使用RegexBuddy会做这...也通过视觉工作室运行它会给你想要的东西...你的链接不起作用,所以我不能帮助更多。 – abc123

+0

@ abc123请阅读我的PS –

+0

我的意思是使用正则表达式... – abc123

回答

1

你应该能够做到的全局替换:

public static DataTable.*?{.*?DbCommand.*?\("(.*?)"\);.*?}

所有我已经做了改变,以匹配整个块,包括使用一堆.*? s的函数定义。

注意:请确保您的正则表达式设置使得点(.)匹配所有个字符,包括换行符。


事实上,如果你想关闭了所有的空格,您可以在前面巴掌\s*$1\n取代:

\s*public static DataTable.*?{.*?DbCommand.*?\("(.*?)"\);.*?}

使用你的测试用例:http://regexr.com?37ibi

+0

所以它应该是'[\ s \ S]' –

+0

太棒了! http://regexr.com?37ibr –

+0

@RoyiNamir当然,或者使用“dotall”选项(在JavaScript中,我认为这是's'标志) –

2

不幸的是, JavaScript不理解lookbehind。如果是这样,你可以改变你的正则表达式匹配.*?前(后视)DbCommand.*?\("和跟随(前视)"\);

凭借该解决方案被拒绝,我相信干净的解决方案是进行两场比赛:

// you probably want to build the regexps dynamically 
var regexG = /DbCommand.*?\("(.*?)"\);/g; 
var regex = /DbCommand.*?\("(.*?)"\);/; 
var matches = str.match(regexG).map(function(item){ return item.match(regex)[1] }); 

console.log(matches); 
// ["Eservices_Claims_Get_Pending_Claims_List", "Eservices_Claims_Get_Pending_Claims_Step1"] 

DEMO:http://jsbin.com/aqaBobOP/2/edit

0

尝试简单地更换整个文档使用这个表达式替换:

^(?: |\t)*(?:(?!DbCommand).)*$ 

然后,您将只剩下以字符串开头的行DbCommand

然后,您可以通过在全局范围内替换: \r?\n\s*\n来删除两者之间的空格。

下面是这个工作的一个例子:http://regexr.com?37ic4

+0

中有一个复选框dotall,这不会产生纯化结果。 –

1

你可以使用这个(不忽略大小写和多选项,具有全局搜索):

pattern: (?:[^D]+|\BD|D(?!bCommand))+|DbCommand [^"]+"([^"]+) 
replace: $1\n 
相关问题