Javascript Unicode Переопределение соответствия, А НЕ буквы или цифры

#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>