如何用正则表达式匹配正则表达式?

我最近看了《30分钟学会正则表达式》
看到博主自己做了一个C#版本的正则测试器,所以我突发奇想,昨晚写了个js版本的正则测试器。但是呢还是比较粗糙。关于怎么判断用户输入的正则表达式是正确的正则表达式,题主使用了以下的方法。

var pattern = /^\/(.*)\/([igm]{0,3})$/;
var testStr1 = '/ab[de]/igm';
var result = testStr1.match(pattern);
var MatchedRegExp = new RegExp(result[1], result[2]);

像这样如此这般就可以用用户输入生成一个正则表达式。

但是我遇到了以下问题:
如果用户输入的正则中有换行符的话,就会出错。
比如: testStr = '/ab\ncd/igm'
因为本来作为输入结尾的$匹配上了\n,这样整个正则就有可能无法正确匹配了。

所以在此询问一下有没有比较好的实现方法?

根据本问题中@依云大神提出的方法,我实现了一个测试器,在此表示感谢。链接:《自己实现的一款在线Javascript正则表达式测试器——JRE-Parser

阅读 7.7k
2 个回答

谢谢@Skyfei的热心回答。

不过我更偏爱依云大神在评论里的答案~:
直接用 .indexOf.lastIndexOf 取两个 / 的位置

你想实现的功能,有个在线验证正则表达式的比较厉害。你可以参考参考 http://leaverou.github.io/regexplained/

其实可以用eval函数。 比如一个正则表达式 /ab[de]/igm 要转换成正则,不需要你做的那么麻烦
直接 eval('/ab[de]/igm')

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏