有可能做这样的事情吗?
var pattern = /some regex segment/ + /* comment here */
/another segment/;
或者我必须使用新的RegExp()
语法并连接一个字符串?我更喜欢使用文字,因为代码更不言自明,也更简洁。
发布于 2008-10-09 00:54:14
下面是如何在不使用正则表达式文字语法的情况下创建正则表达式。这使您可以在字符串成为正则表达式对象之前执行任意字符串操作:
var segment_part = "some bit of the regexp";
var pattern = new RegExp("some regex segment" + /*comment here */
segment_part + /* that was defined just now */
"another segment");
如果您有两个正则表达式文字,您实际上可以使用以下技术将它们连接起来:
var regex1 = /foo/g;
var regex2 = /bar/y;
var flags = (regex1.flags + regex2.flags).split("").sort().join("").replace(/(.)(?=.*\1)/g, "");
var regex3 = new RegExp(expression_one.source + expression_two.source, flags);
// regex3 is now /foobar/gy
它只是比表达式1和2是文字字符串而不是文字正则表达式更冗长。
发布于 2010-01-15 00:17:32
我不太同意"eval“选项。
var xxx = /abcd/;
var yyy = /efgh/;
var zzz = new RegExp(eval(xxx)+eval(yyy));
将给出"//abcd//efgh//“,这不是预期的结果。
使用这样的源码
var zzz = new RegExp(xxx.source+yyy.source);
会给出"/abcdefgh/“,这是正确的。
逻辑上不需要求值,你知道你的表达式。你只需要它的来源或者它的编写方式,而不一定需要它的价值。至于标志,您只需要使用RegExp的可选参数。
在我的情况下,我确实遇到了^和$在几个表达式中使用的问题,我试图将它们连接在一起!这些表达式是程序中使用的语法过滤器。现在我不想把它们中的一些一起用来处理介词的情况。我可能不得不“切片”源代码,去掉开头和结尾的^(和/或)$ :)干杯,Alex。
发布于 2012-07-25 09:52:53
尽可能多地使用文字语法会更好。它更短,更易读,而且您不需要转义引号或双转义符。摘自"Javascript Pattern“,Stoyan Stefanov 2010。
但是使用New可能是连接的唯一方式。
我会避免使用eval。这不安全。
https://stackoverflow.com/questions/185510
复制相似问题