2013-02-22 56 views
1

我想修改無效的正則表達式,而不是拋出一個錯誤,但在引發錯誤之前,我不能得到無效的正則表達式的串...修改無效的JavaScript

var rex = /t(h)?u(?(1)r|e)sday/.replace(/\(\?\((\d)\)(.+?\|)(.+?)\)/g,'((?!\\$1)$2\\$1$3)').replace(/^\/|\/$/g,'') 

這工作,但顯然不是我要找的解決方案...

try{ 
    var rex = /t(h)?u(?(1)r|e)sday/ 
} catch(e){ 
    var rex = new RegExp(e.toString().split(/: /)[2].replace(/\(\?\((\d)\)(.+?\|)(.+?)\)/g,'((?!\\$1)$2\\$1$3)').replace(/^\/|\/$/g,'')) 
} 
console.log(rex) 

我希望能夠來定義正則表達式的正則表達式,而不是作爲一個字符串。可以做到嗎?

+0

你想用這個做什麼? – Blender 2013-02-22 11:12:51

+0

我想能夠定義什麼javascript認爲是無效的正則表達式(在這種情況下,包括一個有條件的'(?(1)r | e)'),並攔截和修改(所以它可以被消毒)解釋器會拋出一個錯誤。 – 2013-02-22 11:15:07

+0

我明白了,但爲什麼? – Blender 2013-02-22 11:15:45

回答

1
var rex, str = 't(h)?u(?(1)r|e)sday'; 
try{ 
    rex = new RegExp(str); 
} catch (e) { 
    rex = new RegExp(str.replace(/\(\?\((\d)\)(.+?\|)(.+?)\)/g, '((?!\\$1)$2\\$1$3)';).replace(/^\/|\/$/g,'')) 
} 
console.log(rex) 
+0

那麼,這比我做的更好 - 謝謝,但仍然沒有達到我想要的。我真的希望能夠將原始定義作爲正則表達式,然後再進行修改。我最終瞄準的目的是爲了擴展RegExp原型,以便能夠修改這樣的情況,所以作爲第一步,我試圖確定是否有可能捕獲並修改無效的正則表達式。 – 2013-02-22 12:17:48