我有一个类似于下面的文本。它包含一个 4
数字,后跟 digit-
或 whitespace
,后跟 .
、 ?
、 -digit
或 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.
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 位数字,但在第二段中没有找到。
最佳答案
您可以使用以下模式:
/(?:\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);
}
关于javascript - 正则表达式准确找到 4 位数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51262823/