VBScript регулярное выражение, заменить две строки - PullRequest
0 голосов
/ 14 сентября 2018

У меня есть этот xml:

<doc>
<ContactPrimaryEmail></ContactPrimaryEmail>
<ContactAlternateEmail></ContactAlternateEmail> 
<ContactPrimaryMobile>+00xxxxxx</ContactPrimaryMobile>
<ContactAlternateMobile></ContactAlternateMobile> 
</doc>

Я хочу применить регулярное выражение в VBScript для замены содержимого" + 00xxxxxx"атрибута ContactPrimaryMobile , просто измените номер:

<ContactPrimaryMobile>+00xxxxxx</ContactPrimaryMobile>

Я новичок в vbscripting, и мои навыки в создании объектов и применении шаблона ограничены, поэтому, пожалуйста, вы можетепомогите мне преобразовать это регулярное выражение для использования его в VBScript:

(?<=\<ContactPrimaryMobile\>)(.*)(?=\<\/ContactPrimaryMobile)

ОБНОВЛЕНИЕ Я получаю это:

Объект не поддерживает это свойство или метод: 'Submatches'

при выполнении:

Dim oRE, oMatches
Set oRE = New RegExp
oRE.Pattern = "<ContactPrimaryMobile>(.*?)</ContactPrimaryMobile>"
oRE.Global = True
Set oMatches = oRE.Execute("<doc><ContactPrimaryEmail></ContactPrimaryEmail><ContactAlternateEmail></ContactAlternateEmail><ContactPrimaryMobile>+00xxxxxx</ContactPrimaryMobile><ContactAlternateMobile></ContactAlternateMobile></doc>")
Wscript.Echo oMatches.Submatches(0)

Ответы [ 2 ]

0 голосов
/ 14 сентября 2018

Я знаю, что вы прямо сказали , и у вас есть ответ, но альтернативный подход к достижению той же конечной цели - использовать вместо этого анализатор XML.

option explicit

dim xmldoc
set xmldoc = CreateObject("MSXML2.DomDocument")
xmldoc.load "doc.xml"
dim primaryMobileNode
set primaryMobileNode = xmldoc.selectSingleNode("/doc/ContactPrimaryMobile")
primaryMobileNode.text = "new value"
xmldoc.save "changed-doc.xml"
0 голосов
/ 14 сентября 2018

Прежде всего, регулярное выражение VBScript не поддерживает вид сзади, вам необходимо захватить часть между двумя строками.

Затем вам нужно получить субматч , получив доступ к объекту совпадения после .Execute совпадения с регулярным выражением и получив .Submatches(0):

Dim oRE, oMatches, objMatch
oRE.Pattern = "<ContactPrimaryMobile>(.*?)</ContactPrimaryMobile>"

, а затем

Set oMatches = oRE.Execute(s)
For Each objMatch In oMatches
  Wscript.Echo objMatch.Submatches(0)
Next

Для замены используйте соответствующие группировки и метод:

oRE.Pattern = "(<ContactPrimaryMobile>).*?(</ContactPrimaryMobile>)"
' and then
s = oRE.Replace(s,"$1SOME_NEW_VALUE$2")
...