Обновление
"Обратите внимание, что есть еще много символов, которые могут быть не видны."
null
(\u{0}
) был добавлен.Если вы хотите обнаружить все пробелы, независимо от ширины, используйте метапоследовательность плюс, квантификатор \s+
(квантификатор +
соответствует одному или нескольким предшествующим ему символам) и альтернативу (ы) |
между ним иостальная часть регулярного выражения (|
- это ИЛИ).
Это может быть
XY проблема .Если вам действительно необходимо заменить символы нулевой ширины на
[ Заполните пробел ] , затем продолжите.Если вам нужен способ скопировать их и сохранить URL-адрес без изменений, то вместо этого закодируйте его с помощью
encodeURIComponent()
.
Всего четыре символа нулевой ширины :
- U + feff - интервал без перерывов нулевой ширины
- U + 200b - пробел нулевой ширины
- U + 200c - несоединение нулевой ширины
- U + 200d - столяр нулевой ширины
Чтобы использовать Юникод в RegEx, мы должны использовать никодный флаг u
и следующий синтаксис:
U + feff >>> \u{feff}
Следующая демонстрация извлечет слаг из URL и удалит ранее упомянутые символы нулевой ширины.Если вы хотите заменить их чем-то (я понятия не имею, почему это было бы полезно ...), сделайте следующее:
- Первый параметр:
url
| Строка |(обязательно) - Второй параметр:
slug
| Boolean |(по умолчанию: true
) Возвращает слаг по умолчанию.Если false
, возвращается полный URL.Передайте явно, чтобы передать третий параметр явно. - Третий параметр:
rpl
Строка или регулярное выражение Это заменяющие символы.По умолчанию он удаляет символы нулевой ширины без замены.
// Each url has a zero width character in the slug
let u200b = `https://example.com/path/to/slugs`;
let ufeff = `https://example.com/path/to/slugs`;
let u200c = `https://example.com/path/to/slugs`;
let u200d = `https://example.com/path/to/slugs`;
const getSlug = (url, slug = true, rpl = '') => {
let regex = /\u{0}+|\u{feff}+|\u{200b}+|\u{200c}+|\u{200d}/gu;
let string;
if (slug) {
string = url.split('/').pop().trim();
console.log(`Old Length of slug: ${string.length}`);
} else {
string = url;
console.log(`Old Length of url: ${string.length}`);
}
let clean = string.replace(regex, rpl);
console.log(`New Length: ${clean.length}`);
return clean;
}
getSlug(u200b);
getSlug(ufeff);
getSlug(u200c);
getSlug(u200d);