我有一个字符串,它只是中间有一个空格的单词。假设没有特殊字符,我想匹配包含数字的所有单词,而忽略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位数字。
但是,我不确定如何将它们组合起来。
答案 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, ""));

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