Javascript сопоставить и заменить на Unicode - PullRequest
5 голосов
/ 27 мая 2009

У меня есть некоторый javascript, который читает некоторые файлы cookie и выполняет некоторые сопоставления. Я использую группировки, чтобы поймать части регулярного выражения и использовать их позже. У меня проблема с символами Юникода, хотя. Если у меня есть такой символ, как \ u25BA ►, когда я нахожу этот символ в группе, он возвращает строку «\ u25BA» вместо искомого символа Юникод. Если я укажу персонажа, я смогу решить проблему, но я не смогу заставить его работать более широко. Следующее будет работать так, как я хочу:

var matches=theOnclick.match(/.*\(event, ?"([^"]*)", ?"([^"]*)".*\)/);
var expand=matches[1].replace(/\\u25BA/, '\u25BA');

но это не будет работать:

var expand=matches[1].replace(/\\u([0-9A-Z])/, '\u\1');

есть предложения?

Дополнительная информация: Спасибо за ваши ответы. Позвольте мне добавить немного больше фона. Я думаю, что проблема в том, что я получаю свои спички от «щелчка» на промежутке. Я включил чуть более подробный пример ниже. Если у меня есть нормальная строка с символами Юникода, то при сопоставлении я получаю символы Юникода. Однако, когда я получаю строку из значения onclick, я получаю escape-последовательности Юникода вместо этого. Поэтому я пытался преобразовать escape-последовательности Юникода обратно в символы Юникода. Я надеюсь, что в этом есть смысл. Возможно, есть другой способ сделать это.

В приведенном ниже примере bar ведет себя так, как я хочу, а foo - нет.

<html>
<body>
<span id='foo' onclick='expandCollapse(event, "►", "▼");'>foo</span>
<script type='text/javascript'>
var foo= document.getElementById('foo').onclick+'';
alert(foo);
var foomatches=foo.match(/.*\(event, ?"([^"]*)", ?"([^"]*)".*\)/);
alert(foomatches);
var bar='expandCollapse(event, "►", "▼");'
var barmatches=bar.match(/.*\(event, ?"([^"]*)", ?"([^"]*)".*\)/);
alert(barmatches);
</script>
</body>
</html>

Ответы [ 2 ]

3 голосов
/ 27 мая 2009

Я думаю, что ваш \ 1 не так. Это должно быть как:

"\u2603".replace(/(.)/, "$1"))

$ 1 - это обратная ссылка в тексте замены.

Но я не совсем уверен, что вы пытаетесь сделать. Имейте в виду, что вы можете использовать только с юникодом литералы . Таким образом, \ u в регулярном выражении соответствует литералу \, а затем литералу u. И \ u в тексте замены - это u.

1 голос
/ 27 мая 2009

а как же

var expand=matches[1].replace(/\\u([0-9A-Z])/, '\1');

? Я не думаю, что вам нужно сбежать \u там.

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