регулярное выражение js: замена символа на юникод

#javascript #jquery #html #regex

#javascript #jquery #HTML #регулярное выражение

Вопрос:

Я пишу плагин jQuery для замены пробелов или пробелов перед ! или ? на a NARROW NO-BREAK SPACE , как это принято во французском языке. Дело в том, что мне не удается заменить что-либо символом Unicode.

 var text = $(this).text();
$(this).text(text.replace(/.?/g, 'u202F?'));   
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p>Contrary to popular belief, Lorem Ipsum is not simply; random text ! It has roots in a piece. of classical Latin literature from 45 BC?</p>  

Комментарии:

1. Ну, код, похоже, вообще не работает. Обратите внимание, что вы также можете заменить на amp;#8239; entity . .replace(/.?/g, 'amp;#8239;?')

2. В моем примере я хотел бы добавить узкий пробел без разрыва между C и ? в последнем предложении.

3. Затем попробуйте .replace(/.(?=?)/g, '$amp;amp;#8239;')

4. Он отображает amp;#8239; в письме

5. Вы имеете в виду, установив мета-кодировку в UTF-8?

Ответ №1:

Рассматриваем только замену текста,

     text.replace(/[ u202F]*([!?])/g, "u202F$1")
  

преобразует ноль или более символов пробела или узких неразрывных пробелов text , за которыми следует ‘!’ или ‘?’, в один узкий неразрывный пробел, за которым следует соответствующий символ ‘!’ или ‘?’ (проверено в Firefox и IE).

 [ u202F]
  

внутри регулярного выражения определяется набор символов для соответствия пробелам и включает в себя сам символ ограниченного неразрывного пробела. Это может быть расширено, чтобы включить определенные дополнительные символы пробела, такие как неразрывный пробел ( u00A0 ), табуляции, или заменено на s , чтобы соответствовать любым символам пробела, включая перевод строки.

Ответ №2:

Все пробелы и пробелы перед ? будут заменены вашим NARROW NO-BREAK SPACE

 var text = $('p').text();
$('p').text(text.replace(/s*?/g, 'u202F?')); 
  

https://jsfiddle.net/tct4e73c/1/

Обновить

Добавлено !

 var text = $('p').text();
$('p').text(text.replace(/.s*(?=!|?)/g, 'u202F')); 
  

https://jsfiddle.net/tct4e73c/2/