Почему я не могу заменить строку, содержащую Unicode? - PullRequest
0 голосов
/ 04 февраля 2019

Я пытаюсь заменить юникод в строке с помощью регулярных выражений со вкусом JavaScript.Однако я не могу заменить строку Юникода строкой желаний.

Это работает, как и ожидалось:

function replacer(match, p1) {
  return "World";
}
var newString = 'Hello9A'.replace(/[0-9A-F]{2}/g, replacer);
console.log(newString); // HelloWorld

Это код, который я пытаюсь заставить его работать:

function replacer(match, p1) {
  console.log("match: ", match);
  console.log("p1: ", p1);
  return "World";
}
var newString = 'Hello\u0B70'.replace(/\\u[0-9A-F]{4}/g, replacer);
console.log(newString);

Мой ожидаемый newString должен быть HelloWorld.Тем не менее, я получаю Hello୰.

Я даже тестировал на Regex101, и это регулярное выражение действительно захватывает \u0B70.В то же время я не могу выйти из системы match и p1, поэтому я не уверен, почему.

Как правильно заменить этот юникод на желаемую строку?

1 Ответ

0 голосов
/ 04 февраля 2019

Ваш шаблон

\\u[0-9A-F]{4}

будет соответствовать части строки, где буквально содержит обратный слеш, затем u, за которым следуют 4 шестнадцатеричных символа.Но ваша входная строка содержит только 6 символов, 5 из которых «привет»:

console.log('Hello\u0B70');
console.log('Hello\u0B70'.length);

Вы должны соответствовать фактическому символу Юникода там:

function replacer(match, p1) {
  console.log("match: ", match);
  console.log("p1: ", p1);
  return "World";
}
var newString = 'Hello\u0B70'.replace(/\u0B70/g, replacer);
console.log(newString);

Если вы хотите сопоставить любому символу Юникода вообще (что в основном означает «любой символ»), вы можете использовать набор символов,как

[\u0000-\uFFFF]

, но алфавитные символы, такие как «Hello», тоже, конечно, Unicode, так что они также будут сопоставлены, что не то, что вам нужно - определите точный диапазон символов, который вы хотитесопоставить и поместить этот диапазон в набор символов.

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