【问题标题】:JavaScript - Getting specific 9 character value from string by regexJavaScript - 通过正则表达式从字符串中获取特定的 9 个字符值
【发布时间】:2019-07-08 20:00:05
【问题描述】:

我正在尝试从一个字符串中检索一个 9 数字长的值。

字符串永远不会有相同的内容,但总会有一组长度为 9 个字符的数字,我试图将它们放入变量中。

https://jsbin.com/gabuhilexu/edit?js,console

我已经尝试了一些正则表达式示例

var first = "https://www.wrike.com/open.htm?id=119464511";
var second = "119464511: Hello world";
var third = "Hello world: 119464511 - Testing";

var broken = first.split('https://www.wrike.com/open.htm?id=');

var reg = /([^0-9])(?:11(1\d)1(\d{4}))([^0-9])/g;

console.log(first.split(reg));
console.log(reg.test(second));

有两个示例说明当前如何传递字符串,我正在尝试将 119464511 值放入变量中。

【问题讨论】:

  • 如果它只是一个九位数字,你不能匹配/\d{9}/吗?
  • 你可以使用:/\b\d{9}\b/
  • 或匹配1的\b11\d{5}11\b
  • 数字可能并不总是在开头或结尾,也可能永远不会是 1。
  • 你是什么意思他们可能永远不会是?当您说您正在尝试获取包含 4 个的 119464511 时,这会让人感到困惑。

标签: javascript regex typescript


【解决方案1】:

由于多种原因,您尝试的 RegEx 存在问题。

  • 首先,它使用非捕获组;这有效地否定了 您正在搜索的所有内容。
  • 其次,它要求第一个 字符是非数字的,这不适用于您的示例 存储在变量second中。
  • 第三,在非捕获组中搜索多个1s 是硬编码的,但因为id 是有效随机的(如您所指出的),这对于绝大多数价值观。

为了跟进第三个要点,您提供的 RegEx 将仅匹配符合以下模式的值:A111#1####A,其中A 表示任何非数字字符,1 是硬编码的。 # 是您在0-9 范围内搜索任何数字的唯一位置。

如果您只是想获取数字,那么您可以使用/\d{9}/g 的简单正则表达式,它会在您提供的字符串中查找任何和所有 9 个数字字符组。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-24
    • 1970-01-01
    • 2019-07-22
    • 2022-11-22
    • 2019-07-03
    • 2017-06-07
    • 1970-01-01
    • 2015-10-28
    相关资源
    最近更新 更多