jQuery substring或regex从序列化字符串中删除多余的字符

时间:2013-02-07 20:53:05

标签: javascript jquery regex grails

我正在从grails select标签中获取值,并且需要删除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个。

我如何仅提取所需的碎片?

1 个答案:

答案 0 :(得分: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, ...]