用于匹配单词的Javascript正则表达式,用于忽略4位数字

时间:2017-09-19 07:15:00

标签: javascript regex

我有一个字符串,它只是中间有一个空格的单词。假设没有特殊字符,我想匹配包含数字的所有单词,而忽略4位数字。

hello12345 12345hello 123456789 12 red hello 1234 5678

匹配:

hello12345 12345hello 123456789 12

最终目标是用空字符串替换hello12345 12345hello 123456789 12,结果是:

red hello 1234 5678

以下\w*\d\w*匹配带有数字的字词 和\b\d{4}\b匹配所有4位数字。 但是,我不确定如何将它们组合起来。

2 个答案:

答案 0 :(得分:1)

匹配并捕获您需要的内容并匹配您不需要的内容(请参阅The Best Regex Trick Ever):



var re = /\b\d{4}\b|(\w*\d\w*)/g;
var str = "hello12345 12345hello 123456789 12 red hello 1234 5678";
var m, res = [];
while (m = re.exec(str)) {
    if (m[1]) res.push(m[1]);
}
console.log(res);




\b\d{4}\b替代方案仅匹配,但在捕获组(\w*\d\w*)的帮助下,第二个(...)捕获。该值保存在第1组中,可通过m[1]访问。

答案 1 :(得分:1)

这个正则表达式

/((\b(\d{1,3}|\d{5,})\b)|([a-z]+\d\w*|\w*\d[a-z]+))\s*/gi

匹配:

// Digit-only words with less than or more than 4 digits
\b(\d{1,3}|\d{5,})\b

// Words that contain at least a number and a letter
[a-z]+\d\w*|\w*\d[a-z]+

含。他们之间的空白。



var string = "hello12345 12345hello 123456789 12 red hello 1234 5678";
var regex = /((\b(\d{1,3}|\d{5,})\b)|([a-z]+\d\w*|\w*\d[a-z]+))\s*/gi
console.log(string.replace(regex, ""));




可能有一个更简单的。这只是我的头脑。