仅当此数字存在时,正则表达式匹配不同的数字

时间:2017-06-30 10:42:09

标签: regex string regex-negation regex-lookarounds

早上好,

我在寻找实现这种情况的方法时遇到了正则表达式的问题:


输入字符串(测试字符串)可以是以下任何选项:

  • 清空字符串:
    1. “”
  • 一个数字的字符串( beggining 可能字母):
    1. “1234567890”
    2. “aa1234567890”
  • 带有多个数字的字符串(并且可能是字母 开始用分号分隔
    1. “1234567890; 1234567890”
    2. “aa1234567890; aa1234567890”
    3. “aa1234567890; 1234567890”
    4. “1234567890; aa1234567890”
    5. “1234567890; aa1234567890; ...”(您可以想象的任何组合)


我的正则表达式搜索总是会尝试匹配一个已知的字符串,该字符串将始终如下:

  • 单号
    1. “12345”
  • 单个数字以某些字母开头
    1. “bb12345”


我已经尝试过但没有成功:https://regex101.com/r/0ojdb9/3


总结一下,当我测试时,我有已知的字符串来构建正则表达式(比如说“12345”),匹配应该只发生:

  • [任何字符或字符串的开头或字符串的开头但不是NUMBER] 12345 [字符串的任何字符或结尾或行号但不是NUMBER]
  • 示例:

    1. “12345”.test(“(12345)”) - >匹配
    2. “12345 6 ”。test(“(12345)”) - >不匹配
    3. 0 12345”.test(“(12345)”) - >不匹配
    4. “12345;”。test(“(12345)”) - >匹配
    5. “12345 6 ;”。test(“(12345)”) - >不匹配
    6. 0 12345;”。test(“(12345)”) - >不匹配

    7. “a1​​2345”.test(“(12345)”) - >匹配

    8. “a12345 6 ”。test(“(12345)”) - >不匹配
    9. “a 0 12345”.test(“(12345)”) - >不匹配
    10. “a12345;”。test(“(12345)”) - >匹配
    11. “a12345 6 ;”。test(“(12345)”) - >不匹配
    12. “a 0 12345;”。test(“(12345)”) - >不匹配

2 个答案:

答案 0 :(得分:1)

您可以使用

/(?:^|\D)12345(?!\d)/

匹配:

  • (?:^|\D) - 字符串开头或任何非数字字符
  • 12345 - 已知值
  • (?!\d) - 在已知值之后必须没有数字。

参见JS demo:



val = 12345;
rx = new RegExp("(^|\\D)" + val + "(?!\\d)");
console.log(rx.test("12345"));  // Match
console.log(rx.test("123456")); //  NO Match
console.log(rx.test("012345")); //  NO Match
console.log(rx.test("12345;"));  // Match
console.log(rx.test("123456;")); //  NO Match
console.log(rx.test("012345;")); //  NO Match
console.log(rx.test("a12345"));  // Match
console.log(rx.test("a123456")); //  NO Match
console.log(rx.test("a012345")); //  NO Match
console.log(rx.test("a12345;"));  // Match
console.log(rx.test("a123456;")); //  NO Match
console.log(rx.test("a012345;")); //  NO Match




答案 1 :(得分:1)

我正在回答我的问题,但所有的功劳归于用户Egan Wolf,因为他是在原帖的评论中发布解决方案的人(我不知道如何标记他或给他信用)

这个正则表达式解决了我的问题的答案:

([^0-9;\n]*(?<!\d)1234567890(?!\d)[^0-9;\n]*)

可在此处查看:https://regex101.com/r/0ojdb9/4

非常感谢你的帮助!