首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在JavaScript中连接正则表达式文字?

如何在JavaScript中连接正则表达式文字?
EN

Stack Overflow用户
提问于 2008-10-09 00:43:13
回答 8查看 111.3K关注 0票数 169

有可能做这样的事情吗?

var pattern = /some regex segment/ + /* comment here */
    /another segment/;

或者我必须使用新的RegExp()语法并连接一个字符串?我更喜欢使用文字,因为代码更不言自明,也更简洁。

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 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是文字字符串而不是文字正则表达式更冗长。

票数 210
EN

Stack Overflow用户

发布于 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。

票数 20
EN

Stack Overflow用户

发布于 2012-07-25 09:52:53

尽可能多地使用文字语法会更好。它更短,更易读,而且您不需要转义引号或双转义符。摘自"Javascript Pattern“,Stoyan Stefanov 2010。

但是使用New可能是连接的唯一方式。

我会避免使用eval。这不安全。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/185510

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档