Как удалить Emoji из строки с помощью VB

#regex #vbscript

#регулярное выражение #vbscript — скрипт

Вопрос:

Мне нужно удалить некоторые символы emoji из строки с помощью классического скрипта asp и vb. Вот что у меня есть:

👪 Повтор / Другое

📅 По расписанию

💲 Ведущий

И что мне нужно:

Повторение / Другое

Запланированный

Ведущий

Я смог удалить смайлики с помощью этой функции, но я хочу сохранить специальные символы, такие как косая черта /, пробелы, amp;, : и т.д.

Любая помощь приветствуется.

 Function strClean (strtoclean)
Dim objRegExp, outputStr
Set objRegExp = New Regexp
objRegExp.IgnoreCase = True
objRegExp.Global = True
objRegExp.Pattern = "((?![a-zA-Z0-9]).) "
outputStr = objRegExp.Replace(strtoclean, "-")
objRegExp.Pattern = "- "
outputStr = objRegExp.Replace(outputStr, "")
strClean = outputStr
End Function
 

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

1. Попробуйте удалить все не-ASCII, objRegExp.Pattern = "[^ -~]"

2. Большое вам спасибо, очень признателен. Этот шаблон работает для сохранения всех буквенно-цифровых символов, objRegExp.Pattern = «((?![a-zA-Z0-9]).) » но он не удаляет смайлики. Понадобятся ли мне две функции / шаблоны, чтобы избавиться от смайликов?

3. Не objRegExp.Pattern = "[^ -~] " возвращает правильный результат для вас? Попробуйте также objRegExp.Pattern = "(?:(?![ -~])[sS]) "

Ответ №1:

Ваше текущее регулярное выражение соответствует любому символу, кроме разрыва строки и алфавитно-цифровых символов ASCII. Он не соответствует смайликам, потому что движок регулярных выражений на основе VBScript ECMA-262 3rd edition не может сопоставлять символы астрального плана с простым . шаблоном.

Если вы хотите просто добавить поддержку сопоставления смайликов к вашему текущему шаблону, вы можете заменить шаблон . на (?:[-tx0Bfx0E-u2027u202A-uD7FFuE000-uFFFF]|[uD800-uDBFF][uDC00-uDFFF]|[uD800-uDBFF](?![uDC00-uDFFF])|(?:[^uD800-uDBFF]|^)[uDC00-uDFFF]) шаблон и использовать

 objRegExp.Pattern = "(?:(?![a-zA-Z0-9])(?:[-tx0Bfx0E-u2027u202A-uD7FFuE000-uFFFF]|[uD800-uDBFF][uDC00-uDFFF]|[uD800-uDBFF](?![uDC00-uDFFF])|(?:[^uD800-uDBFF]|^)[uDC00-uDFFF])) "
 

Смотрите демонстрацию регулярных выражений

Если вы просто хотите удалить все символы, кроме ASCII, вы можете использовать

 objRegExp.Pattern = "objRegExp.Pattern = "(?:(?![ -~])[sS]) "
 

Шаблон соответствует любому одному или нескольким символам () [sS] (соответствует любым символам с пробелами и без пробелов), которые не равны печатным символам ASCII.

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

1. Движок регулярных выражений VBScript в последний раз был выпущен в IE 5.5, в котором реализована нестандартная реализация JavaScript JScript на основе ECMAScript версии 3, а не 5.

2. @Lankymart Интересно, у вас есть какая-нибудь ссылка, где это задокументировано?

3. Это немного сложно, но поддержка регулярных выражений VBScript объясняет, как последняя реализация была в IE 5.5, и вы можете отслеживать управление версиями JScript оттуда через Википедию . ECMAScript версии 5 не использовался до тех пор, пока Chakra (движок JScript) не был реализован для IE9 и вызывал JavaScript, но за счет любой совместимости с активными сценариями. Из-за этого он стоял бок о бок с классической реализацией JScript, которая все еще использует ECMAScript версии 3.