我正在从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个。
我如何仅提取所需的碎片?
答案 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, ...]