Javascript - Замена нескольких частей строки в одном go - PullRequest
0 голосов
/ 30 марта 2020

Я хочу заменить несколько частей строки разными вещами. У меня есть ряд URL-адресов, которые содержат эти строки, которые нужно изменить, и все они следуют одному и тому же шаблону.

например

  • 'spani sh -beginners-course'
  • 'Курс итальянского для начинающих'
  • 'Испанский sh Курс для итальянского начинающего'

Я просто хочу, чтобы результатом были языки, например, испанский sh, итальянский, испанский sh итальянский

Я пробовал это в качестве теста, но он возвращает "испанский sh undefined undefined"

const pageName = 'spanish-beginners-course'
const chars = { '-beginners': '', '-course': '', '-': ' ' }
const language = pageName.replace(/-|beginners|course/g, m => chars[m])

Ответы [ 3 ]

1 голос
/ 30 марта 2020

Это происходит потому, что ваше совпадение с REGEX находит beginners, но в вашем chars объекте нет ключа с именем beginners - он называется -beginners. То же самое для course / -course.

const pageName = 'spanish-beginners-course'
const chars = { '-beginners': '', '-course': '', '-': ' ' }
const language = pageName.replace(/-|beginners|course/g, m => chars[m])

В любом случае ваш объект не нужен, как и REGEX (как указывает @Alastair), поскольку вы заменяете stati c, не меняя подстрока.

const language = pageName.replace('-beginners-course', '');
0 голосов
/ 30 марта 2020

Вы получаете ноль, потому что эта часть -|beginners|course является чередованием , которое будет соответствовать либо -, beginners или course

. Вы используете совпадение, чтобы получить значение от объекта, но объект содержит -beginners и -course

Если вы хотите выполнить замену, и перед ней должно быть хотя бы 1 слово, вы можете использовать группу захвата $1 в замене и сопоставьте после нее то, что вы хотите удалить.

(\w+(?:-\w+)*)-beginners-course\b

Regex demo

const pageName = 'spanish-beginners-course';
const language = pageName.replace(/(\w+(?:-\w+)*)-beginners-course\b/g, "$1");
console.log(language)

[
  'spanish-beginners-course',
  'italian-beginners-course',
  'spanish-italian-beginners-course',
  'donotremove!-beginners-course'
]
.forEach(s => console.log(s.replace(/(\w+(?:-\w+)*)-beginners-course\b/g, "$1")));
0 голосов
/ 30 марта 2020

Ваш случай очень прост, вы можете разбить и взять первым.

let pageName = "spanish-beginners-course";
let language = pageName.split(/-/)[0];
console.log(language); // spanish
pageName = "italian-beginners-course";
language = pageName.split(/-/)[0];
console.log(language); //italian
.as-console-row {color: blue!important}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...