正则表达式查找确切的4位数字

时间:2018-07-10 10:23:52

标签: javascript regex

我有一个与以下文本相似的文本。它包含4digit-后面的whitespace位数字,后跟.?-digit或{{1 }}。


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

whitespace

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.


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

2 个答案:

答案 0 :(得分:4)

您可以使用以下模式:

/(?:\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);
}

答案 1 :(得分:2)

(\s|digit-)([0-9]{4})(?=-digit|\.|\?|\s)

查询的开头和结尾都需要一个OR语句,中间是四位数。

进一步说明:

  • (?!\s|digit-)-前瞻性否定:空格或digit-
  • [0-9]{4}-一个从0到9的数字,正好是四次
  • (?=-digit|\.|\?|\s)-积极向前看:要么-digit,一个.(因为.是Regex中的特殊字符而被转义),一个问号(对于相同的字符也进行了转义)原因)或空格。

Play around on Regex101