ASP Classic regex ведет себя иначе, чем в .Net - PullRequest
1 голос
/ 02 апреля 2012

У меня есть это регулярное выражение, которое работает в .Net - но не в ASP Classic. Это также работает на RegExr

Используется для замены пробелов запятыми, если пробел не заключен в кавычки.

dim strSearch
dim strPattern
strPattern = "\s(?=(?:[^\x22]*\x22[^\x22]*\x22)*[^\x22]*\z)" '\x22 = " (dbl quotes)

strSearch = The "quick brown" fox jumps

strSearch = ereg_replace(strSearch, pattern, ",", true)

response.write(strSearch)

'Expect: The,"quick brown",fox,jumps
'Actual: The "quick brown" fox jumps

function ereg_replace(strOriginalString, strPattern, strReplacement, varIgnoreCase)
    dim objRegExp : set objRegExp = new RegExp
    with objRegExp
    .Pattern = strPattern
    .IgnoreCase = varIgnoreCase
    .Global = False
    .Multiline = False
    end with
    ereg_replace = objRegExp.replace(strOriginalString, strReplacement)
    set objRegExp = nothing
end function

Что мне нужно изменить, чтобы адаптировать шаблон для работы в ASP Classic?

1 Ответ

4 голосов
/ 02 апреля 2012

Я почти уверен, что причина этого в том, что \z якоря не поддерживаются регулярным выражением ASP, попробуйте заменить это на $:

\s(?=(?:[^\x22]*\x22[^\x22]*\x22)*[^\x22]*$)

См. Эту страницу на Regular VBScriptПоддержка выражений для получения дополнительной информации.

...