2016-08-10 3 views
0

Ich bin Neuling in JavaScript regex und ich blieb in Regex in Javascript stecken.Wie verwende ich RegExp in Javascript?

Ich habe zwei scenerio

1) Ich habe eine Zeichenfolge wie aaa/+/bbb/+, ich will mit Streichern diese Zeichenfolge übereinstimmen aaa/1/bbb/hello123 und aaa/1/bbb/ mit regex und beide sollten true zurückzukehren. Wenn i aaa/1/geben bbb dann sollte es false

2) geben, wenn ich String aaa haben/# dann sollte es alle oben genannten Strings entsprechen und returmn wahr

Kann jemand mir helfen?

+0

Können Sie das konkretisieren, was die Bedeutung von '+' und '#' ist? Es sieht so aus, als ob "+" eine oder mehrere Zahlen und Buchstaben abgleichen soll, aber es ist nicht klar. – 4castle

+0

'2) Wenn ich String aaa/# dann sollte es alle oben genannten Zeichenfolgen und Rückkehr wahr" entsprechen - nein sollte es nicht –

+0

@ JaromandaX Können Sie erklären? Sie definieren einfach benutzerdefinierte Platzhalterzeichen. Ich verstehe nicht, wie '#' nicht laut sein sollte, um diese Bedeutung zu haben. – 4castle

Antwort

0

Der reguläre Ausdruck ^aaa\/[0-9]+\/bbb\/[\w\d]*$ folgende Saiten entsprechen:

aaa/1/bbb/hello123 
aaa/1/bbb/ 

werden diese Strings nicht zugeordnet werden:

aaa/1/bbb 

ich unklar bin über Ihr zweites Szenario - sagen Sie, dass der Regex sollte passt auch die Zeichenfolge aaa/#?

Sie können wie so Regex in Javascript verwenden:

var re = /^aaa\/[0-9]+\/bbb\/[\w\d]*$/; 
var matches = re.test("aaa/1/bbb/"); 
if (matches) { console.log("it matches!"); } 
+1

Verwenden Sie 're.test (str)', um zu sehen, ob es eine Übereinstimmung gibt. – 4castle

+0

Danke 4castle - vergaß diese Methode, wird aktualisiert. –

1

In regex, die +-[^/]* übersetzen würde, und die #-.* übersetzen würde.

Der nächste Schritt besteht im Extrahieren von Sonderzeichen in der Eingabezeichenfolge. This regex hat diesen Zweck. Da die + ein Sonderzeichen ist, müssen wir manuell unescapen.

RegExp.escape= function(s) { 
 
    return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); 
 
}; 
 

 
function matchesPattern(pattern, input) { 
 
    pattern = RegExp.escape(pattern);   // escape special characters 
 
    pattern = pattern.replace(/\\\+/g, "[^/]*"); // replace '\+' 
 
    pattern = pattern.replace(/#/g, ".*");  // replace '#' 
 
    pattern = new RegExp("^" + pattern + "$"); // construct regex 
 
    return pattern.test(input);     // test input 
 
} 
 

 
console.log(matchesPattern("aaa/+/bbb/+", "aaa/1/bbb/hello123")); 
 
console.log(matchesPattern("aaa/+/bbb/+", "aaa/1/bbb/")); 
 
console.log(matchesPattern("aaa/+/bbb/+", "aaa/1/bbb")); 
 

 
console.log(matchesPattern("aaa/#", "aaa/1/bbb/hello123")); 
 
console.log(matchesPattern("aaa/#", "aaa/1/bbb/")); 
 
console.log(matchesPattern("aaa/#", "aaa/1/bbb"));