1

我想使用正则表达式函数根据键从查询字符串中删除一个项目。

假设我有一个这样的查询字符串:

page.asp?item1=data1&item2=data2&item3=data3

我想调用这样的函数:

newQs = removeQsItem(url, "item2")

...并让该函数返回:

page.asp?item1=data1&item3=data3

...但如果使用第 1 项或第 3 项调用,我也需要它来工作——无论它们在查询字符串中的位置如何。

到目前为止,我的策略是尝试抓住“requiredItem = {除了&符号之外的任何东西}”。但我真的在正则表达式语法上苦苦挣扎,我的大脑快要融化了。

任何帮助将不胜感激。

4

2 回答 2

0

它必须与RegEx一起使用吗?你能不能做一些字符串函数,比如获取给定字符串“item2”的 StrPos,然后找到下一个&符号的 StrPos,然后只是 SubString 这些位置得到“item2 = data2&”(你可能需要在索引中添加 1第二个位置实际上得到&符号?)只是做一个 myQueryString.Replace(substringToRemove, "") 来替换那个子字符串?

于 2013-05-03T23:42:02.273 回答
0

我不是正则表达式方面的专家,但我一直在努力学习。所以我做了一些研究(和反复试验),并想出了这个。其他人可能可以使这个更清洁。

(\bitem2=[A-Za-z0-9]*&|&\bitem2=[A-Za-z0-9]*$|^\bitem2=[A-Za-z0-9]*$)

我会稍微解释一下。首先,一个搜索有 3 个。

  • 第一个找到您的项目,如果它后跟一个&符号&(所以我们可以删除尾随&)
  • 如果它是最后一个项目,第二个会找到您的项目(因此我们可以删除前面的 &)
  • 最后一个是如果您的项目是唯一的项目。

编码:

  • ( this | that )表示或。匹配这个或那个。
  • \b匹配单词边界。所以我们知道我们匹配的是整个单词,而不仅仅是一个单词的一部分。
  • [A-Za-z0-9]*匹配零个或多个字母或数字。如果您有空值,则为零。
  • $匹配行尾
  • ^匹配行首
于 2013-05-04T04:11:00.240 回答