【问题标题】:Regex for containing x AND not containing y包含 x AND 不包含 y 的正则表达式
【发布时间】:2022-07-21 15:31:09
【问题描述】:

我正在尝试为包含点 (.) 且不包含 @ 的字符串编写一个简单的正则表达式。

我设法这样做了:

(^(?!.*@).*\..*$) 

它有效! 但我收到一个错误:

'Value "/(^(?!.*@).*\..*$)" must be a valid regular expression. Details: invalid or unsupported Perl syntax.'

我搜索并发现问题出在否定部分 - “?!”。 尝试更改表达式以使用 ^ 但没有运气。

感谢您的帮助,谢谢。

【问题讨论】:

  • 试试^[^@.]*[.][^@]*$
  • 如果出现错误,它如何工作?
  • @Barmar 我的意思是正则表达式本身是正确的,但我们的系统不支持它的语法

标签: javascript regex perl regex-negation


【解决方案1】:

您可以使用不依赖环视的正则表达式:

^[^@.]*\.[^@]*$

或者,如果您无法找到正确数量的转义反斜杠:

^[^@.]*[.][^@]*$

详情

  • ^ - 字符串开头
  • [^@.]* - 除了 .@ 之外的零个或多个字符
  • \. / [.] - 只是一个点字符
  • [^@]* - 除了@ 字符之外的零个或多个字符
  • $ - 字符串结束。

【讨论】:

  • 为什么需要[^@.]* 而不是[^@]*
  • @Barmar 减少回溯。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-23
  • 2019-01-30
  • 1970-01-01
相关资源
最近更新 更多