获取非标准模式中的子字符串

Get sub-string within non-standard pattern

本文关键字:字符串 非标准 模式 获取      更新时间:2023-09-26

在以下情况下,我想获得一个子字符串:

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

是的,它很难看。我可以用一个正则表达式和一个方法做一些更清晰的事情吗?

您可以将此正则表达式与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>');

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

JS演示

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