我在这里查看了多个示例,它们都部分工作但不是全部。
我正在尝试创建一个正则表达式来替换基于变量的字符串中的文本。我让替换工作,但只在第一次搜索。等。
目标是替换:文字:{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作为键在循环中运行记录集 - 所以我可能需要一个建议在哪里插入它。) 非常感谢任何帮助!
答案 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,它也会有效。
我希望我能清楚这一点。我确实注意到这不会解决你的问题,因为你想要替换符合特定条件的东西。固定模式将对您有所帮助,也许如果您能够更清楚地解决您的问题,并提供具有确切输入/输出的示例,我们可以帮助您进一步。