2012-04-02 28 views
1

我有这个正则表达式,它在.Net中工作 - 但不在ASP Classic中。它也适用于RegExrASP经典正则表达式在.Net中的行为不同于.net

它用于用逗号替换空格,除非空格在引号内。

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?

+0

'“\ x22”'不是空格。这是一个双引号:'''。空格是'“\ x20”' – kirilloid 2012-04-02 19:14:57

回答

4

我敢肯定这样做的原因是,\z锚不受ASP正则表达式的支持,请尝试更换与$

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

的其他信息请参见第VBScript’s Regular Expression Support这个网页。