获取非标准模式

时间:2016-04-29 17:42:23

标签: javascript regex

我想在下面的例子中得到一个子字符串:

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(/^.*_/, ''));

是的,它很难看。只用一个正则表达式和一种方法,我能做些更清楚的事吗?

2 个答案:

答案 0 :(得分: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>');
&#13;
&#13;
&#13;

答案 1 :(得分:1)

捕获组的结果存储在match objects中,可以通过match[1]等访问。

JS Demo

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