2016-04-08 12 views
2

sourcecodeの一部を切り捨てる正規表現を作成しました。私のregexはregex101.comのサンドボックスで動作しますが、実際のjavascriptでは動作しません

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

regex101.com where it appears to workでテストしました。

しかし、それは私のコンソールでは動作しません:

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

あなたは私がmyregex101スニペットからのデータをコピーした逐語的に見ることができるように。私が得た結果はnullです。

+0

あなたは何CRシンボルが存在しませんか? '\ n'を' \ r?\ n'に置き換えてみてください。 –

答えて

2

あなたの入力文字列は、regex101の文字列と同じではありません。

として、あなたの入力を宣言します。そして、このやっ

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

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

すると、この試合の配列与える:コンソールでインラインすべてをやっについて

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

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

は行います

"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

正規表現でtemplate literalsとマルチラインmフラグを使用してください。

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

あなたのコードの問題は、私が見る、元の文字列が適切にエスケープされていないです。

// 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]);

関連する問題