2016-04-08 2 views
2

Ich habe Regex erstellt, um einen Teil aus dem Quellcode zu schneiden.Meine Regex funktioniert in Regex101.com Sandbox, aber nicht in tatsächlichen Javascript

/SRC_START\n([\s\S]*?)\n\/\/SRC_END/i 

Ich testete es auf regex101.com where it appears to work.

Aber es funktioniert nicht in meiner Konsole:

"ddd\ 
//SRC_START\ 
    function bounce(objectA, objectB) {} \ 
    \ 
//SRC_END\ 
    return bounce;\ 
})".match(/SRC_START\n([\s\S]*?)\n\/\/SRC_END/i) 

Wie man sehen kann ich die Daten aus myregex101 Schnipsel auf Datenträger kopiert. Das Ergebnis ist null.

+0

Sind Sie sicher, dass keine CR Symbole gibt es? Ersetzen Sie '\ n' durch' \ r? \ N'. –

Antwort

2

Ihre Eingabezeichenfolge stimmt nicht mit der von regex101 überein.

Erklären Sie Ihre Eingabe als:

var str = 'ddd\n//SRC_START\n function bounce(objectA, objectB) {} \n\n//SRC_END\n return bounce;\n})\n'; 

Dann dies zu tun:

var re = /SRC_START\n([\s\S]*?)\n\/\/SRC_END/i; 
var m = str.match(re); 

wird dieses Spiel Array geben:

["SRC_START 
    function bounce(objectA, objectB) {} 

//SRC_END", " function bounce(objectA, objectB) {} 
"] 

Für alles inline in der Konsole zu tun tun:

"ddd\n\ 
//SRC_START\n\ 
    function bounce(objectA, objectB) {}\n \ 
    \ 
//SRC_END\n\ 
    return bounce;\n\ 
})".match(/SRC_START\n([\s\S]*?)\n\s*\/\/SRC_END/i) 
0

Verwenden Sie template literals und multiline m Flag auf Regex.

var matches = `ddd 
 
//SRC_START 
 
    function bounce(objectA, objectB) {} 
 

 
//SRC_END 
 
    return bounce; 
 
})`.match(/SRC_START\n([\s\S]*?)\n\/\/SRC_END/im); 
 

 
console.log(matches); 
 
document.body.innerHTML = '<pre>' + JSON.stringify(matches, 0, 4) + '</pre>';

0

Das Problem mit Ihrem Code, wie ich sehe, ist die Quelle String entkam nicht richtig.

// the src must be properly escaped 
 
var src = "ddd\n"+ 
 
"//SRC_START\n"+ 
 
" function bounce(objectA, objectB) {} \n"+ 
 
"\n"+ 
 
"//SRC_END\n"+ 
 
" return bounce;\n"+ 
 
"})\n"+ 
 
""; 
 
var match = src.match(/SRC_START\n([\s\S]*?)\n\/\/SRC_END/i); 
 
alert("WHOLE MATCH:\n" + match[0] + "\n\nCAPTURED GROUP:\n" + match[1]);

Verwandte Themen