#javascript #regex #replace #unicode #xregexp
#javascript #регулярное выражение #заменить #юникод #xregexp
Вопрос:
Я хотел бы преобразовать это:
var result = mystring.replace(/[^a-zA-Z0-9] /g, ' ');
к функционирующей версии Unicode, чтобы я мог индексировать ТОЛЬКО буквы и цифры. Например, я не хочу [-_%<>…] . Поскольку JS не поддерживает это изначально, я использую xregexp.
Похоже, это не дает мне никаких результатов… Правильно ли здесь указаны буквы и цифры?
<script src="https://unpkg.com/xregexp/xregexp-all.js"></script>
<script>
var s = `joanthan------______ <me> bornss $%^amp;` asdfasdf áeé´sé´s , н, п, р, с, т, ф, х, ц, ч`;
var r1 = XRegExp.replace(s, /[^p{L}p{N}] /g, ' ');
var r2 = s.replace(/[^a-zA-Z0-9] /g, ' ');
console.log(r1);
console.log(r2);
</script>
Мысли? Спасибо!
Комментарии:
1. Разве ваше расширенное регулярное выражение не должно заключаться в кавычки?
2. Нет, это не имеет значения, я все равно не получаю разных результатов,
'/[^p{L}p{N}] /g'
кавычки не требуются, как вы можете видеть, обычное регулярное выражение работает нормально.
Ответ №1:
Чтобы использовать экранирование свойств Unicode с помощью RegExp (и, соответственно, XRegExp), вам необходимо установить флаг Unicode.
const s = `joanthan------______ <me> bornss $%^amp;` asdfasdf áeé´sé´s , н, п, р, с, т, ф, х, ц, ч`;
let r1 = s.replace(/[^p{L}p{N}] /gu, ' ')
console.log(r1);
Комментарии:
1. В то время как другой ответ технически соответствует тому, что я задал, это намного лучше, поскольку мне не нужно ничего импортировать. Спасибо!
Ответ №2:
Согласно их документации replace
поддерживает два параметра соответствия; string
и Regexp
. При этом он не будет анализировать строковое выражение и поэтому будет рассматриваться как замена буквальной строки. Чтобы использовать a xregex
, вам сначала нужно будет создать экземпляр выражения, а затем использовать его в качестве аргумента.
var s = `joanthan------______ <me> bornss $%^amp;` asdfasdf áeé´sé´s , н, п, р, с, т, ф, х, ц, ч`;
var match = XRegExp('[^\p{L}\p{N}] ', 'g');
var r1 = XRegExp.replace(s, match, ' ');
var r2 = s.replace(/[^a-zA-Z0-9] /g, ' ');
console.log(r1);
console.log(r2);
<script src="https://unpkg.com/xregexp/xregexp-all.js"></script>