2013-02-22 53 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