Работа с WebSoft.RegExp.dll
Подключение
Работа с .Net библиотеками возможна только на сервере
Проверялось на следующих версиях WebSoft.RegExp.dll
- 1.22.11.1
Создание класса для работы с библиотекой
Методы
-
GetVersion()
Возвращает версию сборкиWebSoft.RegExp.dll
. -
Pattern
Геттер/Сеттер. Шаблон регулярного выражения. -
Global
Геттер/Сеттер. Не используется в текущей реализации. Предположительно зарезервировано для расширения (например, аналогg
в JavaScript). -
IgnoreCase
Геттер/Сеттер. Влияет на чувствительность к регистру при поиске. -
MultiLine
Геттер/Сеттер. Управляет тем, как символы начала^
и конца строки$
работают в многострочном режиме. -
IsMatch(source)
Проверяет, соответствует ли хотя бы одна подстрока изsource
шаблону. -
Replace(source, repl)
Заменяет вхождения, соответствующие шаблонуPattern
, на строкуrepl
в переданной строкеsource
. -
Execute(source)
Выполняет поиск всех совпадений по шаблону в строкеsource
, возвращает коллекцию совпадений.
GetVersion
Код
Результат
Pattern
ВАЖНО
Шаблон задается строкой, обратите внимание на то, что нужно экранировать некоторые спецсимволы. На примере ниже показан шаблон без экранирования
Код
oRegExp = tools.get_object_assembly('RegExp')
alert('Паттерн по умолчанию: ' + oRegExp.Pattern)
oRegExp.Pattern = 'Name:\s*(\w+),\s*Age:\s*(\d+)'
alert('Паттерн без экранирования: ' + oRegExp.Pattern)
oRegExp.Pattern = 'Name:\\s*(\\w+),\\s*Age:\\s*(\\d+)' // Обязательное экранирование обратной косой черты
alert('Паттерн с экранированием: ' + oRegExp.Pattern)
Результат
17:22:39 [0865] Паттерн по умолчанию: undefined
17:22:39 [0865] Паттерн без экранирования: Name:s*(w+),s*Age:s*(d+)
17:22:39 [0865] Паттерн с экранированием: Name:\s*(\w+),\s*Age:\s*(\d+)
Global
Судя по коду в dll - не используется в текущей реализации
IgnoreCase
Код
oRegExp = tools.get_object_assembly('RegExp')
oRegExp.Pattern = 'ББ'
var text = '0000_бб_0000'
alert('Шаблон поиска: ' + oRegExp.Pattern)
alert('Текст: ' + text)
oRegExp.IgnoreCase = true
alert('IgnoreCase = true -> ' + oRegExp.IsMatch(text))
oRegExp.IgnoreCase = false
alert('IgnoreCase = false -> ' + oRegExp.IsMatch(text))
Результат
17:42:38 [0537] Шаблон поиска: ББ
17:42:38 [0537] Текст: 0000_бб_0000
17:42:38 [0537] IgnoreCase = true -> true
17:42:38 [0537] IgnoreCase = false -> false
MultiLine
Код
oRegExp = tools.get_object_assembly('RegExp')
oRegExp.Pattern = '^Error:.*$'
var text = 'Info: Server starting...\nError: Неизвестная ошибка\nInfo: Server started fail'
alert('Шаблон поиска: ' + oRegExp.Pattern)
alert('Текст: ' + text)
// MultiLine = true: ^ и $ работают на каждой строке отдельно
oRegExp.MultiLine = true
alert('MultiLine = true -> ' + oRegExp.Execute(text).Item)
// MultiLine = false: ищет ^ и $ только в начале и конце всей строки
oRegExp.MultiLine = false
alert('MultiLine = false -> ' + oRegExp.Execute(text).Item)
Результат
17:55:43 [0104] Шаблон поиска: ^Error:.*$
17:55:43 [0104] Текст: Info: Server starting...
Error: Неизвестная ошибка
Info: Server started fail
17:55:43 [0104] MultiLine = true -> Error: Неизвестная ошибка
17:55:43 [0104] MultiLine = false -> undefined
IsMatch
Код
oRegExp = tools.get_object_assembly('RegExp')
oRegExp.Pattern = 'Name:\\s*(\\w+),\\s*Age:\\s*(\\d+)'
alert('Регулярка: ' + oRegExp.Pattern)
var text1 = 'Name: Владислав, Age: 99'
alert('Текст: ' + text1)
alert('Результат соответствия: ' + oRegExp.IsMatch(text1))
var text2 = 'Name - Владислав, Age - 99'
alert('Текст: ' + text2)
alert('Результат соответствия: ' + oRegExp.IsMatch(text2))
Результат
18:27:58 [0654] Регулярка: Name:\s*(\w+),\s*Age:\s*(\d+)
18:27:58 [0654] Текст: Name: Владислав, Age: 99
18:27:58 [0654] Результат соответствия: true
18:27:58 [0654] Текст: Name - Владислав, Age - 99
18:27:58 [0654] Результат соответствия: false
Replace
Код
var oRegExp = tools.get_object_assembly('RegExp')
oRegExp.Pattern = '[0-9]'
// Простая замена. Заменяем каждую цифру в строке на символ *.
var text1 = '1a2b3c'
alert(oRegExp.Replace(text1, '*'))
// Замена с использованием групп.
// Регулярное выражение извлекает имя и возраст из строки и подставляет их в новую строку
var text2 = 'Name: Владислав, Age: 99'
oRegExp.Pattern = 'Name:\\s*(\\w+),\\s*Age:\\s*(\\d+)'
alert(oRegExp.Replace(text2, '[$1] - [$2]'))
Результат
Execute
Метод Execute
возвращает коллекцию MatchCollection
Код
var oRegExp = tools.get_object_assembly('RegExp')
oRegExp.Pattern = '\\d{1,3}'
var text = '+7 111 222 33 44'
// Метод Execute возвращает обёртку над коллекцией совпадений
// — фактически это объект MatchCollection
var oMatches = oRegExp.Execute(text)
alert(oMatches) // Websoft.RegExp.MatchCollection
Результат
Коллекция MatchCollection
имеет свои собственные методы, которые мы рассмотрим дальше
Count
Возвращает количество найденных совпадений
Код
var oRegExp = tools.get_object_assembly('RegExp')
oRegExp.Pattern = '\\d{1,3}'
var text = '+7 111 222 33 44'
var oMatches = oRegExp.Execute(text)
alert('Количество совпадений: ' + oMatches.Count)
Результат
Item
Метод Item()
возвращает элемент коллекции Match
Код
var oRegExp = tools.get_object_assembly('RegExp')
oRegExp.Pattern = '\\d{1,3}'
var text = '+7 111 222 33 44'
var oMatches = oRegExp.Execute(text)
for (i = 0; i < oMatches.Count; i++) {
alert(oMatches.Item(i))
}
Результат
Элемент коллекция Match
имеет свои собственные методы, которые мы рассмотрим дальше
Value
Возвращает значение элемента коллекции
Код
var oRegExp = tools.get_object_assembly('RegExp')
oRegExp.Pattern = '\\d{1,3}'
var text = '+7 111 222 33 44'
var oMatches = oRegExp.Execute(text)
for (i = 0; i < oMatches.Count; i++) {
oItem = oMatches.Item(i)
alert('Item(' + i + ').Value: ' + oItem.Value)
}
Результат
20:23:40 [0381] Item(0).Value: 7
20:23:40 [0381] Item(1).Value: 111
20:23:40 [0381] Item(2).Value: 222
20:23:40 [0381] Item(3).Value: 33
20:23:40 [0381] Item(4).Value: 44
Length
Возвращает длину элемента коллекции
Код
var oRegExp = tools.get_object_assembly('RegExp')
oRegExp.Pattern = '\\d{1,3}'
var text = '+7 111 222 33 44'
var oMatches = oRegExp.Execute(text)
for (i = 0; i < oMatches.Count; i++) {
oItem = oMatches.Item(i)
alert('Item(' + i + ').Length: ' + oItem.Length)
}
Результат
20:26:30 [0444] Item(0).Length: 1
20:26:30 [0444] Item(1).Length: 3
20:26:30 [0444] Item(2).Length: 3
20:26:30 [0444] Item(3).Length: 2
20:26:30 [0444] Item(4).Length: 2
FirstIndex
Возвращает номер позиции с которой начинается найденное совпадение в исходной строке. Нумерация с 0
Код
var oRegExp = tools.get_object_assembly('RegExp')
oRegExp.Pattern = '\\d{1,3}'
var text = '+7 111 222 33 44'
var oMatches = oRegExp.Execute(text)
for (i = 0; i < oMatches.Count; i++) {
oItem = oMatches.Item(i)
alert('Item(' + i + ').FirstIndex: ' + oItem.FirstIndex)
}
Результат
20:27:08 [0419] Item(0).FirstIndex: 1
20:27:08 [0419] Item(1).FirstIndex: 3
20:27:08 [0419] Item(2).FirstIndex: 7
20:27:08 [0419] Item(3).FirstIndex: 11
20:27:08 [0419] Item(4).FirstIndex: 14
SubMatches
Метод SubMatches
возвращает значения захваченных групп.
Код
var oRegExp = tools.get_object_assembly('RegExp')
oRegExp.Pattern = '\\d{1,3}'
var text = '+7 111 222 33 44'
var oMatches = oRegExp.Execute(text)
for (i = 0; i < oMatches.Count; i++) {
oItem = oMatches.Item(i)
alert('Item(' + i + ').SubMatches(): ' + oItem.SubMatches())
}
Результат
20:31:13 [0514] Item(0).SubMatches(): Websoft.RegExp.SubMatches
20:31:13 [0514] Item(1).SubMatches(): Websoft.RegExp.SubMatches
20:31:13 [0514] Item(2).SubMatches(): Websoft.RegExp.SubMatches
20:31:13 [0514] Item(3).SubMatches(): Websoft.RegExp.SubMatches
20:31:13 [0514] Item(4).SubMatches(): Websoft.RegExp.SubMatches
Это способ получить значения групп захвата (то, что находится в круглых скобках в регулярном выражении) для одного совпадения.
Поменяем шаблон регулярки и добавим в него группы. Выведем найденные группы в цикле, а потом соберем из этих групп новую строку
Код
var oRegExp = tools.get_object_assembly('RegExp')
oRegExp.Pattern = '(\\d)-(\\d{3})-(\\d{3})-(\\d{2})-(\\d{2})'
var text = '+7-111-222-33-44'
var oMatches = oRegExp.Execute(text)
for (i = 0; i < oMatches.Count; i++) {
oItem = oMatches.Item(i)
alert('Item(' + i + ').SubMatches(): ' + oItem.SubMatches().Count())
for (j = 0; j < oItem.SubMatches().Count; j++) {
oSubMatch = oItem.SubMatches().Item(j)
alert('\tItem.SubMatches().Item(' + j + '): ' + oSubMatch)
}
alert(
'Номер телефона: ' + '8' +
oItem.SubMatches(1) +
oItem.SubMatches(2) +
oItem.SubMatches(3) +
oItem.SubMatches(4)
)
}
Результат
При сборке номера телефона использовалась короткая запись для получения значения группы
20:47:36 [0575] Item(0).SubMatches(): 5
20:47:36 [0575] Item.SubMatches.Item(0): 7
20:47:36 [0575] Item.SubMatches.Item(1): 111
20:47:36 [0575] Item.SubMatches.Item(2): 222
20:47:36 [0575] Item.SubMatches.Item(3): 33
20:47:36 [0575] Item.SubMatches.Item(4): 44
20:47:36 [0575] Номер телефона: 81112223344