VBScript正则表达式替换卷曲之间的文本

时间:2012-08-10 02:03:21

标签: regex asp-classic vbscript

我在这里查看了多个示例,它们都部分工作但不是全部。

我正在尝试创建一个正则表达式来替换基于变量的字符串中的文本。我让替换工作,但只在第一次搜索。等。

目标是替换:文字:{1}来自用户1的文字。
{2}来自用户2的文字。
{1}来自用户1的文字。
- 如果是QueryString。我需要替换{}之间的文本。

如果QueryString =用户#例如1,则显示名称,否则显示“用户无”:

响应:文本:NAME1来自用户的文本1.
用户无文本来自用户2.
NAME1来自用户的文本1.
- 如果是QueryString。

-----------------------------------


好的 - 我终于得到了这个文件:

<%
Dim StrX, CallMe, varID, varFirmID, varBKID
CallMe = "0"
CallMe = Request.QueryString("x")
StrX = "Memo Tracking:<br />"
StrX =  StrX & "{1} Test Text 1<br/ >{2} Test Text 2<br/ >{1} Test Text 1<br/ >{2} Test   Text 2<br/ >" 'Data - will replace with Recordset Data later - eventually I will also add   [] for two sets
varFirmID = "0"
varBKID = "0"

Set re = new RegExp 
re.IgnoreCase = true
re.Global = true
re.Pattern = "\{(.*)\}" 'find {} part
set matches = re.Execute(StrX) 

'finds Matches of Firms --------------------------------
If matches.Count > 0 Then
For Each Match in Matches 
varFirmID = matches.item(0).submatches(0)
    If Callme = varFirmID Then
        StrX =(Replace(StrX,matches.item(0).submatches(0),"Replaced Name:"))
            End If
            If Callme <> varFirmID Then
        StrX =(Replace(StrX,matches.item(0).submatches(0),"NO NAME:"))
    End If
Response.Write Strx
'End loop if Match --------------------------------
Next
End If
%>

我不断得到部分结果。我有一种感觉,我需要在代码之后添加“do while loop”。

目标是...... querystring(x)= 1结果:

备忘录追踪:
替换名称1:测试文本1
名称:测试文本2
替换名称1:测试文本1
名称:测试文本2

目标是...... querystring(x)= 2结果:

备忘录追踪:
名称:测试文本1
替换名称2:测试文本2
名称:测试文本1
替换名称2:测试文本2

(我将使用varFirmID作为键在循环中运行记录集 - 所以我可能需要一个建议在哪里插入它。) 非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

首先看一下,我看到你的模式中有一个错误:你在Javascript / Java中使用了forwardlash类型的“模式开始”,但在VBScript中没有这样做

re.Pattern = "/{(.*)}/"

应该是:

re.Pattern = "{(.*)}"    ' note: is not going to work for you either, read below

但是,大括号也是特殊字符(重复前一序列的计数),所以你必须转义它们:

re.Pattern = "\{(.*)\}" 

我在您的代码中发现的另一个错误:

if matches > o then

您应该将o替换为0,将matches替换为matches.count

if matches.count > 0 then
好的,现在我们到了某个地方。代码正在运行,但返回1} Text from user 1.<br/>{2} Text from user 2.<br/>{1而不是第一个数字,因为正则表达式是matching greedy。正则表达式很有趣,因为您可以为同一个问题创建不同的解决方案。我选择从字符串中获取数字部分,但您也可以找出其他解决方案:

re.Pattern = "\{(\d+)\}"

\ d后面的加号(+)表示你想要1到无限次的数字,所以即使你的数字超过9,它也会有效。

我希望我能清楚这一点。我确实注意到这不会解决你的问题,因为你想要替换符合特定条件的东西。固定模式将对您有所帮助,也许如果您能够更清楚地解决您的问题,并提供具有确切输入/输出的示例,我们可以帮助您进一步。