javascript - “combine” 2 带逻辑或的正则表达式?

标签 javascript regex logic

我有两种 javascript 模式:

/^[A-z0-9]{10}$/ - 长度正好为 10 个字母数字符号的字符串。

/^\d+$/ - 长度至少为 1 的任意数字。

10或任意数字的OR字符串的表达式怎么写?

var pattern =/^([A-z0-9]{10})|(\d+)$/;

由于某种原因不起作用。它至少通过了

pattern.test("123kjhkjhkj33f");  // true  

A-z0-9 字符串不是数字,长度也不是 10。

最佳答案

请注意,您的 ^([A-z0-9]{10})|(\d+)$ 模式匹配 A-z0-9 中的 10 个字符字符串开头的范围(^ 仅修改 ([A-z0-9]{10}) 部分(第一个替代分支),或 (|) (\d+)$ 结尾的 1 个或多个数字($ 仅修改 (\d+ ) 分支模式。

另请注意,A-z 是错字,[A-z] does not only match ASCII letters .

您需要按如下方式修复它:

var pattern = /^(?:[A-Za-z0-9]{10}|\d+)$/;

或使用 i 修饰符:

var pattern = /^(?:[a-z0-9]{10}|\d+)$/i;

参见 regex demo .

请注意,分组在这里很重要:(?:...|...) 使 anchor 适本地应用于它们中的每一个。

详情

  • ^ - 字符串的开始
  • (?: - 非捕获交替组:
    • [A-Za-z0-9]{10} - 10 个字母数字字符
    • | - 或者
    • \d+ - 一位或多位数字
  • ) - 分组构造结束
  • $ - 字符串结尾

关于javascript - “combine” 2 带逻辑或的正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46488991/

相关文章:

javascript - 用 XSLT 替换 Javascript 内容

javascript - 如何使用 KineticJS 用另一个 PNG 图像遮盖 PNG 图像?

javascript - 用js代码设置鼠标位置并将该位置放在其他js代码中

regex - 在正则表达式中解析 FIX 消息

r - 如何在 R 中的多个可选键上加入 2 个数据帧,即(key1 或 Key2)其中一个或两个匹配

javascript - ReactJS 表单 onSubmit 不起作用,它没有被调用

当立即序列不匹配时,Java 使用 Matcher 失败

java - 拆分字符串,如果它有数字

使用信号量的 Java 男女通用浴室程序 - 逻辑问题

c++ - 找出 3 或 5 的所有倍数的总和,直到 1000