1

我正在从 grails 选择标记中获取值,并且需要去除 jQuery 正在获取的额外字符并格式化字符串,然后再将其传递给我们的 BIRT 报告服务器。

grails 的列表如下所示:

Term:
    [201360, Continuing Ed Automn 2013]
    [201350, Summer Session 2013]
    ...
College
    [AS, College of Arts and Sciences]
    [BA, College of Business Administration]
    ...

这是在两个选择列表上进行选择时 jQuery 序列化的示例:

Term=%5B201360%2C+Continuing+Ed+Autumn+2013%5D&College=%5BBA%2C+School+of+Business+Admin%5D 

我希望最终值类似于

Term=201360&College=BA

直接子字符串的问题是变量的数量可以改变,并且两者都是可选的。可能有 1 个,也可能有 20 个。

我将如何只提取所需的部分?

4

1 回答 1

2

我不知道为什么你最终会得到那种数据。反正:

// I guess + mean space here, so I convert it back to space before
// doing percentage unescape
var convertedInput = unescape(inputString.replace(/\+/g, ' '));
var output = convertedInput.replace(/\[ *([^,]+?) *,[^\]]+\]/g, '$1')

正则表达式可能看起来比必要的稍微复杂一些,但我删除了[].

解释:

\[ *([^,]+?) *,[^\]]+\]
  • 整个正则表达式尝试匹配表单的键值对中的值部分key=[item1, item2, ...]。它将捕获第一个项目并丢弃其余项目。
  • \[\]是文字[]字符。
  •  *([^,]+?) *,: 吃掉领先空间 *。然后消费并捕获令牌([^,]+?),假设没有逗号[^,],由于惰性量词+?会在遇到序列之前尽可能少地消费:可选空格后跟(第一个)逗号 *,
  • [^\]]+:消耗(然后扔掉)所有不是的东西]。它将停在](或字符串结尾,但不是这里的情况)。

假设:

  • []是平衡的,没有嵌套。
  • ,要提取的项目内没有逗号。
  • 要修改的键值对的形式为key=[item1, item2, ...]
于 2013-02-07T21:07:58.073 回答