0

我在这里查看了多个示例,它们都部分有效,但并非全部有效。

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

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

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

响应:文本:来自用户 1 的 NAME1 文本。
用户无 来自用户 2
的文本。来自用户 1 的 NAME1 文本。
- 如果是 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
%>

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

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

备忘录跟踪:
已替换 Name1:测试文本 1
NO NAME:测试文本 2
已替换 Name1:测试文本 1
NO NAME:测试文本 2

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

备忘录跟踪:
NO NAME:测试文本 1
被替换 Name2:测试文本 2
NO NAME:测试文本 1
被替换 Name2:测试文本 2

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

4

1 回答 1

0

乍一看,我在您的模式中看到了一个错误:您使用了正斜杠类型的“模式开始”,就像在 Javascript / Java 中可以做的那样,但在 VBScript 中却没有

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

应该:

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

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

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

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

if matches > o then

你应该o用 a0matches替换matches.count

if matches.count > 0 then

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

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

\d 后面的加号 (+) 表示您想要一个数字 1 到无限次,因此即使您的数字超过 9,它也可以工作。

我希望我能把它弄清楚。我确实注意到这不会解决您的问题,因为您想在某些条件匹配时替换它。固定模式将对您有所帮助,也许如果您可以更多地澄清您的问题并提供一个具有准确输入/输出的示例,我们可以进一步帮助您。

于 2012-08-10T06:35:40.943 回答