LINUX.ORG.RU

Чем отличается [\S\D] от [^\s\d]?

 


0

1

На первый взгляд, эти выражения означают одно и то же — непробельный или не цифровой символ. Однако

 "a 1 a 1".replace(/[\S\D]/g, "*") //>>>> ******* // заменяет все

 "a 1 a 1".replace(/[^\s\d]/g, "*") //>>>> * 1 * 1 // работает как ожидается
В чем подвох?

[^\s\d] — это всё, кроме пробельных и кроме цифровых символов.

[\S\D] — это объединение множеств непробельных и нецифровых символов, т.е. все символы.

gentoo_root ★★★★★
()

Это такой тонкий троллинг? Хотя скорее толстый. В операциях со множествами подвох.

Ты указал в верхнем регэкспе что хочешь заменить любой непробельный или любой нецифровой на звездочку. Вот оно и меняет. Во втором случае ты работаешь с другим множеством возможных значений.

UPD: объединение там взялось из класса символов.

TheKnight ★★★
()
Последнее исправление: TheKnight (всего исправлений: 1)
Ответ на: комментарий от theKingOfJava

откуда там объединение то взялось?

Множества значений, указанные в квадратных скобках, разве не объединяются?

melkor217 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.