노드 --trace foo.js가 아래와 같이 methid 추적, 당신을 제공 할 것입니다 :
10: new ~RegExp+23(this=0x167100086871 <JS RegExp>, 0x1667d2c3e3b9 <String[51]: (^(\s*?<br[\s\/]*?>\*?)+|(\s*?<br[\s\/]*?>\s*?)+?$)>, 0x1667d2c3e409 <String[3]: igm>) {
11: ~DoConstructRegExp+23(this=0x9d97d041b9 <undefined>, 0x167100086871 <JS RegExp>, 0x1667d2c3e3b9 <String[51]: (^(\s*?<br[\s\/]*?>\*?)+|(\s*?<br[\s\/]*?>\s*?)+?$)>, 0x1667d2c3e409 <String[3]: igm>) {
12: ~ToString+23(this=0x9d97d041b9 <undefined>, 0x1667d2c3e3b9 <String[51]: (^(\s*?<br[\s\/]*?>\*?)+|(\s*?<br[\s\/]*?>\s*?)+?$)>) {
12: } -> 0x1667d2c3e3b9 <String[51]: (^(\s*?<br[\s\/]*?>\*?)+|(\s*?<br[\s\/]*?>\s*?)+?$)>
12: ~ToString+23(this=0x9d97d041b9 <undefined>, 0x1667d2c3e409 <String[3]: igm>) {
12: } -> 0x1667d2c3e409 <String[3]: igm>
11: } -> 0x9d97d041b9 <undefined>
10: } -> 0x9d97d041b9 <undefined>
10: ~replace+36(this=0x167100086849 <String[715]\: <br/> \x65e9\x9910\x540e\x81ea\x7531\x6d3b\x52a8\xff0c\x4e8e\x6307\x5b9a\x65f6\x95f4\x96c6\x5408\x81ea\x884c\x529e\x7406\x9000\x623f\x624b\x7eed\x3002<br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> \x6839\x636e\x8239\x73ed\x65f6\x95f4\xff0c\x81ea\x884c\x524d\x5f80\x66b9\x7c92\x673a\x573a\xff0c\x8fd4\x56de\x4e2d\x56fd\x3002<br/>\x5982\x9700\x9001\x673a\x670d\x52a1\xff0c\x9700\x589e\x52a0280/\x6bcf\x5355\x3002<br/>>, 0x167100086911 <JS RegExp>, 0x9d97d04291 <String[0]: >) {
그래서 명확하게 코드가 붙어있다 String.replace 메소드에서.
* frame #0: 0x00000af481b48e5b
frame #1: 0x0000000100502574 node`v8::internal::NativeRegExpMacroAssembler::Match(v8::internal::Handle<v8::internal::Code>, v8::internal::Handle<v8::internal::String>, int*, int, int, v8::internal::Isolate*) + 244
frame #2: 0x0000000100436841 node`v8::internal::RegExpImpl::IrregexpExecRaw(v8::internal::Handle<v8::internal::JSRegExp>, v8::internal::Handle<v8::internal::String>, int, int*, int) + 481
frame #3: 0x0000000100545e72 node`v8::internal::Runtime_StringReplaceGlobalRegExpWithString(int, v8::internal::Object**, v8::internal::Isolate*) + 4930
frame #4: 0x00000af481a0963b
frame #5: 0x00000af481b14d09
frame #6: 0x00000af481b47d16
frame #7: 0x00000af481b474a4
frame #8: 0x00000af481a345e7
frame #9: 0x00000af481b46e69
frame #10: 0x00000af481b3f80b
frame #11: 0x00000af481b3c43b
frame #12: 0x00000af481b31a84
frame #13: 0x00000af481b31486
frame #14: 0x00000af481a3b7fa
frame #15: 0x00000af481a38c72
frame #16: 0x00000af481a318fd
frame #17: 0x00000af481a15b62
frame #18: 0x00000001002dad88 node`v8::internal::Invoke(bool, v8::internal::Handle<v8::internal::JSFunction>, v8::internal::Handle<v8::internal::Object>, int, v8::internal::Handle<v8::internal::Object>*) + 728
frame #19: 0x0000000100166d84 node`v8::Function::Call(v8::Local<v8::Context>, v8::Local<v8::Value>, int, v8::Local<v8::Value>*) + 276
frame #20: 0x0000000100666d0a node`node::LoadEnvironment(node::Environment*) + 486
frame #21: 0x000000010066819d node`node::Start(int, char**) + 508
frame #22: 0x0000000100000d34 node`start + 52
내부적으로 정규 표현식 파서가 v8 기본 코드로 고정되어 있습니다.
입력에서 유효한 문자와 표현식에 대해 확실한 경우 v8에서 버그를 제기하는 것이 좋습니다.
희망이 도움이됩니다.
프로필 작성 용 GUI를 선호하므로'node -inspect'를 사용하고 chrome dev 도구를 첨부하십시오. 어쩌면 그것을 시도해보십시오. – Sirko
내 생각 엔 정규 표현식이 [치명적인 역 추적] (http://www.regular-expressions.info/catastrophic.html)에 시달릴 수 있다고 생각합니다. – robertklep