2016-04-29 58 views
0

我希望得到一个子串在下面的情况中的子字符串:获取非标准模式

TruckScaleEntry_DriverId_1535 
       ^------^ 

EntryCreateForm_TruckScaleEntry_DriverId_1535_SelectWidget_Code 
           ^------^ 

在上面的例子中我想DriverId(这并不总是DriverId,它也可能会改变)但我永远不知道我正在处理哪种模式。事实上,我得到它与两个正则表达式和两种方法(matchreplace)一起工作。但是我想知道是否有更好的和更简单的方法来实现它。

我得到的是:

console.log("TruckScaleEntry_DriverId_1535".match(/(?:.*TruckScaleEntry_)[^_]*/)[0].replace(/^.*_/, '')); 
 

 
console.log("EntryCreateForm_TruckScaleEntry_DriverId_1535_SelectWidget_Code".match(/(?:.*TruckScaleEntry_)[^_]*/)[0].replace(/^.*_/, ''));

啊这是丑陋的。我能用一个正则表达式和一种方法做更清晰的事情吗?捕获组

+0

你想** [这](https://regex101.com/r/wF4fG5/1)**? – rock321987

+0

@ rock321987不完全。我更新了这个问题,因为'DriverId'就是一个例子,它也可能会改变。 – DontVoteMeDown

+0

so [this](https://regex101.com/r/wF4fG5/2)? – rock321987

回答

2

可以使用此正则表达式与replace

var s = 'EntryCreateForm_TruckScaleEntry_DriverId_1535_SelectWidget_Code'; 
 

 
res = s.replace(/^.*?TruckScaleEntry_(.+?)_.*$/, '$1'); 
 
document.write(res + '<br>'); 
 

 
// Alternative 
 

 
res = s.match(/TruckScaleEntry_(.+?)_/)[1]; 
 
document.write(res + '<br>');

+0

@DontVoteMeDown,这是否解决了您的问题?你能给一些反馈吗? – trincot

+0

当然,我用过你的解决方案。非常感谢你。 – DontVoteMeDown

+1

不客气。 – trincot

1

结果存储在match objects,其可以通过match[1]

JS访问演示

var str = 'EntryCreateForm_TruckScaleEntry_DriverId_1535_SelectWidget_Code'; 
 
var regex = /TruckScaleEntry_([^_]+)/; 
 
document.writeln(str.match(regex)[1]);

+0

非常感谢。 – DontVoteMeDown