2016-04-29 4 views
0

ich unten eine Unterkette in den Fällen erhalten möchten:Erhalten Unterkette innerhalb Nicht-Standard-Muster

TruckScaleEntry_DriverId_1535 
       ^------^ 

EntryCreateForm_TruckScaleEntry_DriverId_1535_SelectWidget_Code 
           ^------^ 

In den obigen Beispielen I die DriverId (Es wollen, ist nicht immerDriverId, es kann sich auch ändern), aber ich weiß nie, mit welchem ​​Muster ich es zu tun habe. Eigentlich habe ich es mit zwei regex und zwei Methoden (match und replace) zusammen zu arbeiten. Aber ich möchte wissen, ob es einen besseren - und einfacheren - Weg gibt, dies zu erreichen.

Was ich habe ist:

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

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

Ja, es ist hässlich. Kann ich mit nur einer Regex und einer Methode etwas klarer machen?

+0

wollen Sie ** [diese] (https://regex101.com/r/wF4fG5/1) **? – rock321987

+0

@ Rock321987 nicht genau. Ich habe die Frage aktualisiert, weil 'DriverId' ein Beispiel ist, das sich auch ändern kann. – DontVoteMeDown

+0

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

Antwort

2

zugegriffen werden kann Sie diesen regulären Ausdruck mit replace verwenden könnte :

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, hat das dein Problem gelöst? Könnten Sie etwas Feedback geben? – trincot

+0

Sicher, ich habe deine Lösung benutzt. Vielen Dank. – DontVoteMeDown

+1

Gern geschehen. – trincot

1

Ergebnisse der Erfassung Gruppen werden in match objects gespeichert, die durch match[1] usw.

JS Demo

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

+0

Vielen Dank. – DontVoteMeDown

Verwandte Themen