【问题标题】:RegEx to find exactly 4 digits number正则表达式准确找到 4 位数字
【发布时间】:2018-12-18 03:46:45
【问题描述】:

我有一个类似于下面的文本。它包含一个4 数字,后跟digit-whitespace,后跟.?-digitwhitespace


我需要匹配第一段中的所有数字,但第二段中没有,因为这些数字不符合我的条件。

Lorem ipsum 3400-digit, sit amet 5000 consectetur adipisicing elit. Natus, explicabo 6700? Itaque iure ipsum laboriosam, ex nemo delectus iste quia cupiditate digit-9134? Iste nam digit-2456 at voluptate est 8456-digit? At excepturi quis voluptatibus 7500.

Lorem ipsum $5000 dolor sit amet consectetur adipisicing elit. Obcaecati tempora dolorum repellat reiciendis cum soluta deserunt ex voluptatibus, nam illum veniam £5550 quidem aperiam sequi, nostrum sed? Quidem eveniet maiores #5550 autem. https://codepen.io/pen/5000/3454


StackOverflow 上已经有一些类似的问题。我已经浏览了其中的一些(下面的链接),但我仍然无法做到这一点。请在将此问题标记为重复之前,检查您的解决方案是否在第一段中找到所有出现的 4 位数字,但在第二段中没有找到。

【问题讨论】:

  • 是否有 3400-digitdigit 完全一样的词,或者是它,例如3400-456?预期匹配3400500067009134245684567500
  • 它是3400-digit5000-digit*-digit
  • 那么,这些捕获的文本(?:\bdigit-|\s|^)(\d{4})(?=[.?\s]|-digit\b|$),对吧?
  • 非常感谢!看来确实如此。

标签: javascript regex


【解决方案1】:
(\s|digit-)([0-9]{4})(?=-digit|\.|\?|\s)

您需要在查询的开头和结尾使用OR 语句,中间有四位数字。

进一步解释:

  • (?!\s|digit-) - 负前瞻:空格或digit-
  • [0-9]{4} - 一个从 0 到 9 的数字,正好是四次
  • (?=-digit|\.|\?|\s) - 正向前瞻:-digit.(因为. 是正则表达式中的特殊字符而转义)、问号(也出于同样的原因转义)或空格。

Play around on Regex101

【讨论】:

  • 如果没有前瞻,连续的空格分隔匹配将被忽略。在第一组和第三组中,您必须使用 \s 模式。
【解决方案2】:

您可以使用以下模式:

/(?:\bdigit-|\s|^)(\d{4})(?=[.?\s]|-digit\b|$)/gi

请参阅regex demo。您需要获取所有第 1 组值。

详情

  • (?:\bdigit-|\s|^) - digit-(作为一个整体)、空格或字符串开头
  • (\d{4}) - 第 1 组:四位数
  • (?=[.?\s]|-digit\b|$) - 紧靠右边,必须有 .、空格、?-digit(作为一个整体)或字符串结尾。 注意 如果没有前瞻,连续的以空格分隔的匹配将被忽略。

JS 演示:

var strs = ["Lorem ipsum 3400-digit, sit amet 5000 consectetur adipisicing elit. Natus, explicabo 6700? Itaque iure  ipsum laboriosam, ex  nemo delectus iste quia cupiditate digit-9134? Iste nam digit-2456 at voluptate est 8456-digit? At excepturi quis voluptatibus 7500.", "Lorem ipsum $5000  dolor sit amet consectetur adipisicing elit. Obcaecati tempora dolorum repellat reiciendis cum soluta deserunt ex voluptatibus, nam illum veniam £5550 quidem aperiam sequi, nostrum sed? Quidem eveniet maiores #5550 autem. https://codepen.io/pen/5000/3454" ];
var rx = /(?:\bdigit-|\s|^)(\d{4})(?=[.?\s]|-digit\b|$)/gi;
for (var s of strs) {
   var m, res =[];
   while(m=rx.exec(s)) {
     res.push(m[1]);
   }
   console.log(res);
}

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2020-09-21
  • 1970-01-01
  • 2021-03-26
  • 2012-01-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多