2017-01-09 4 views
0

Ich möchte Regex verwenden, um die Zeichenfolge im folgenden Format entsprechen: (# sometext #)Spezifische Muster in Regex passend in Javascript

Im Sinne, was auch immer es ist zwischen (# und #) sollte nur sein abgestimmt. So ist der Text:

var s = "hello(%npm%)hi"; 
var res = s.split(/(\([^()]*\))/); 
alert(res[0]); 
o/p: hello(%npm%)hi 

Und

var s = "hello(#npm#)hi"; 
    var res = s.split(/(\([^()]*\))/); 
    alert(res[0]); 
    o/p: hello 
    alert(res[1]); 
    o/p : (#npm#); 

Aber die Sache ist, einschließlich (# .. #) wie die Regex /(\([^()]*\))/ ist passend alles zwischen () anstatt die Zeichenfolge zu extrahieren:

hello 
(#npm#) 
hi 
+1

Sie können etwas wie '.match (/ \ (# ([^ #] *) # \) /) 'tun, wenn Sie die Teile außerhalb der Klammern nicht benötigen. (Warum benutzt du '.split()'? Wenn du das wirklich machen willst dann vielleicht sowas wie 's.split (/ (\ (# | # \)) /)'?) – nnnnnn

+0

@nnnnnn: habe ich bearbeitet die Frage – user1400915

+0

Versuchen Sie dies: s.match (/ (\ (# ([^ #] *) # \)) /); – user2630764

Antwort

2

Durch Holen Inhalte in Ihrem Weg zu gehen, versuchen Sie dies:

var s = "hello(%npm%)hi"; 
 
var res = s.split(/\(%(.*?)%\)/); 
 
alert(res[1]); 
 
//o/p: hello(%npm%)hi 
 

 
var s = "hello(#npm#)hi"; 
 
    var res = s.split(/(\(#.*?#\))/); 
 
console.log(res); 
 
    
 

 
//hello, (#npm#), hi

Von Ihrem Kommentar, der zweite Teil aktualisiert, erhalten Sie Ihre Segmente in Res-Array:

[ 
    "hello", 
    "(#npm#)", 
    "hi" 
] 
+0

Ich brauche die Ausgabe als: Hallo, (# npm #), Hallo für das zweite Beispiel – user1400915

+0

@ user1400915 aktualisiert die Antwort –

0

Es hängt davon ab, ob Sie mehrere Übereinstimmungen pro Zeichenfolge haben.

// like this if there is only 1 match per text 
 
var text = "some text #goes#"; 
 
var matches = text.match(/#([^#]+)#/); 
 
console.log(matches[1]); 
 

 

 
// like this if there is multiple matches per text 
 
var text2 = "some text #goes# and #here# more"; 
 
var matches = text2.match(/#[^#]+#/g).map(function (e){ 
 
    // strip the extra #'s 
 
    return e.match(/#([^#]+)#/)[1]; 
 
}); 
 

 
console.log(matches);

1

das folgende Muster wird die erforderliche Leistung geben: ""

var s = "hello(#&yu()#[email protected]#)hi"; 
var res = s.split(/(\(#.*#\))/); 
console.log(res); 

passt alles zwischen (# und #)