2017-04-18 30 views
0

我正在寻找一个正则表达式来选择下划线字符之外的文本。正则表达式来选择下划线之外的文本

示例文本:

PartIWant_partINeedIgnored_morePartsINeedIgnored_PartIwant 

基本上,我需要能够选择的第一个关键字它总是第一个下划线和最后一个关键词是总是最后一个下划线前后。作为一个额外的复杂性,也有一些文本没有下划线,这些也需要完全选择。

我还没有最好的是这样的表达:

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

这是只有屈服我的第一部分,而不是第二,它具有非下划线不支持但在所有。

这个正则表达式用于监视我们http流量的工具,这意味着我只能'选择'我需要的部分,但不能调用函数或替换逻辑。

谢谢!

+0

参见['^([^ _ *)(?:* _([^ _ *))$'?(https://开头regex101。 COM/R/YcjWDD/1)。 –

+0

你能替'_。* _'做一个替代吗? –

回答

1

也许是这样的:

/(^[^_]+)|([^_]+$)/g 

也就是说,比赛之一:其次

  • ^[^_]+字符串其次是非下划线的开始,或
  • [^_]+$无下划线字符串的结尾。

var regex = /(^[^_]+)|([^_]+$)/g 
 

 
console.log("A_b_c_D".match(regex)) // ["A", "D"] 
 
console.log("A_b_D".match(regex))  // ["A", "D"] 
 
console.log("A_D".match(regex))  // ["A", "D"] 
 
console.log("AD".match(regex))  // ["AD"]

+0

工程就像一个魅力,谢谢! –

0

我不确定你是否应该在这里使用正则表达式。我认为将字符串拆分为下划线,并且使用结果数组的第一个和最后一个元素可能会更快,而且更简单。

2

使用JavaScript字符串函数split()。检查下面的例子。

var t = "PartIWant_partINeedIgnored_morePartsINeedIgnored_PartIwant"; 
 
var arr = t.split('_'); 
 

 
console.log(arr); 
 

 
//Access the required parts like this 
 
console.log(arr[0] + ' ' + arr[arr.length - 1]);

+0

感谢您的建议,我可以悲伤地不使用JS功能给我的上下文。更新我的问题,以反映这一点。 –

0

琐碎.replace

str.replace(/_.*_/, '') 
// "PartIWantPartIwant" 

相匹配的,你需要进行选择和连接组:

parts = str.match(/^([^_]*).*?([^_]*)$/) 
parts[1] + parts[2] 
// "PartIWantPartIwant" 

编辑

这个正则表达式用于监视我们http流量的工具,这意味着我只能'选择'我需要的部分,但不能调用函数或替换逻辑。

这是不可能的:正则表达式不能匹配不连续的跨度。

+0

感谢您的建议,我可以悲伤地不使用JS功能给我的上下文。更新我的问题,以反映这一点。 –