【问题标题】:jQuery substring or regex to remove extra characters from serialized stringjQuery 子字符串或正则表达式从序列化字符串中删除多余的字符
【发布时间】:2013-02-07 20:53:05
【问题描述】:

我正在从 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 个。

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

【问题讨论】:

  • “使用 jQuery 捕获”到底是什么意思?也许您只是错误地获取了字段值;您可以轻松获取各个字段值。
  • 未捕获,抱歉。我只有 jQuery('select').serialize();
  • 如果你使用.val()而不是.serialize(),你会得到一个字符串(单选)或字符串数​​组(多选)的纯值。 .serialize() 方法明确用于创建 URL 查询字符串。

标签: javascript jquery regex grails


【解决方案1】:

我不确定你为什么会得到这种数据。无论如何:

// 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, ...] 形式的键值对中的值部分。它将捕获第一个项目并丢弃其余项目。
  • \[\] 是文字 [] 字符。
  •  *([^,]+?) *,:吃掉领先空间 *。然后消费并捕获令牌([^,]+?),假设没有逗号[^,],并且由于惰性量词+?会在遇到序列之前尽可能少地消费:可选空格后跟(第一个)逗号@987654334 @。
  • [^\]]+:消耗(然后扔掉)所有不是] 的东西。它将停在](或字符串结尾,但这里不是这种情况)。

假设:

  • [] 是平衡的,没有嵌套。
  • 要提取的项目中没有逗号,
  • 要修改的键值对的格式为key=[item1, item2, ...]

【讨论】:

    猜你喜欢
    • 2016-05-01
    • 2021-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    相关资源
    最近更新 更多