我正在尝试在JavaScript中编写正则表达式,其中包括两个条件A和B
(A)(B)
显然不是有效的解决方案。
我的两个正则表达式是:
^((?=.*?(.*([\.]).*)[^@])[^@]+)$
^((?!\.\.).)*$
所以
^((?=.*?(.*([\.]).*)[^@])[^@]+)(((?!\.\.).)*)$
不会和两个正则表达式相同
我怎样才能做到这一点 ?是否有一般规则?
答案 0 :(得分:2)
有时候,没有一种明显的方法可以结合表达式。就像你说的那样,(A)(B)
无效。由于正则表达式不是一种编程语言,所以你需要的“明显”方法是:
var doesMatch = string.match(/(A)/) && string.match(/(B)/);
如果没有花时间真正破译你想要匹配的内容,很难说是否有一种非显而易见的方法来组合这两个表达式......我只能说没有通用的规则将它们结合起来。
另外,组合两个正则表达式并不一定意味着它更快。取字符串foo bar
和表达式^foo
和bar$
。这两个表达式的“明显”组合是^foo.*?bar$
;但是,^foo
和bar$
分别采取5个步骤,而合并后的版本需要11个步骤。
答案 1 :(得分:1)
答案 2 :(得分:0)
尝试将其分解为您正在测试的实际条件;我看到其中三个:
.
)..
)@
将其中两个转换为前瞻,然后将所有三个链接到一个正则表达式。那将是:
^(?=.*\.)(?!.*\.\.)[^@]+$
但也许你想确定它不会以点开头或结尾。 没有前瞻更容易做到:
^[^@.]+(?:\.[^@.]+)+$