Javascript Regex выражение для сопоставления слов с цифрами, игнорируя 4-значные числа

1

У меня есть строка, которая представляет собой просто слова с одним пробелом между ними. Предполагая никаких специальных символов, я хотел бы совместить все слова, содержащие цифры, игнорируя 4-значные числа.

IE

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
    , \d{1,3}\b ? ..
  • 0
    Захватите то, что вам нужно, и просто сопоставьте то, что вам не нужно - /\b\d{4}\b|(\w*\d\w*)/g и соберите группу 1 (если вам нужно извлечь).
Показать ещё 2 комментария
Теги:

2 ответа

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, ""));

Может быть, проще. Это только с головы.

1

Сопоставьте и захватите то, что вам нужно, и просто совместите то, что вам не нужно (см. "Лучший трюк с регулярным выражением"):

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
    Да! Спасибо за это, после еще одного взгляда я понимаю!
  • 0
    @YAnderson Если это работает для вас, пожалуйста, подумайте о принятии. Если вы нашли это полезным, пожалуйста, рассмотрите возможность голосования. Если вам нужна помощь с этим решением, пожалуйста, оставьте комментарий, и я буду рад уточнить.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню