Regex - Получить текст / только цифры и дополнительные - PullRequest
0 голосов
/ 18 апреля 2019

У меня есть несколько строк, мне нужно применить регулярное выражение, чтобы переформатировать их.

Вот несколько примеров:

Tree Log & Fire (TLF)

Leaves

River Moon (RM)

Использование заглавных букв, пробелов, форматированияэто все именно так, как может выглядеть строка.

Моя цель состоит в том, чтобы они были преобразованы в следующее:

tree-log-fire

leaves

river-moon

Как вы можете заметить, & пропал, и любая строка, имеющая (xx) в конце, отбрасывалась.

Я использую JavaScript .replace() и пытался добавить match(), но это не работает.

Пример кода:

let newString = oldString
    .match(/[^]+(?=\s\()/)
    .replace(/[^A-Z0-9]+/ig, '-')

Теоретически это сработало бы, но я не могу связать .relace с .match.Также я бы предпочел одну строчку Regex.Я пробовал комбинации, но я знаю, что кто-то может быть немного умнее, чем я с регулярными выражениями!

Спасибо за любую помощь!

Ответы [ 2 ]

1 голос
/ 18 апреля 2019

.match() возвращает массив, если было совпадение. Таким образом, чтобы получить подходящую группу, вы должны использовать [0] по результату .match() перед вызовом .replace().

go('Tree Log & Fire (TLF)');
go('Leaves');
go('River Moon (RM)');


function go(oldString) {
    var newString = oldString
        .match(/[^]+(?=(\s\())|.+/)[0] // <-- added [0] to get the 1st group's result str
        .replace(/[^A-Z0-9]+/ig, '-')
        .toLowerCase();

    console.log(newString);
}

Обратите внимание, я добавил |.+ для обработки случая Leaves (там, где нет ()). Ах, и добавил .toLowerCase().

0 голосов
/ 18 апреля 2019

Это, пожалуй, не самый эффективный способ, но ...

let str= "Tree Log & Fire (TLF)";

str= str.replace(/\([^()]*\)/,'')
    .replace(/[^A-Z0-9]+/ig, '-').replace(/\-$/, "").toLowerCase();

console.log(str);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...