【发布时间】:2014-02-21 00:40:07
【问题描述】:
我正在尝试在 JavaScript 中解析一个复杂的字符串,但我对正则表达式非常糟糕,所以我运气不佳。数据被加载到一个格式如下的变量中:
Miami 2.5 O (207.5) 125.0 | Oklahoma City -2.5 U (207.5) -145.0 (Feb 20, 2014 08:05 PM)
我正在尝试按照以下参数解析该字符串:
1) 每个值都必须加载到自己的变量中(IE:Miami 的单独变量,2.5 O,(207.5) 等)
2) 字符串必须在管道字符处拆分(我使用 .split(" | ") 进行此操作)
3) 我正在处理包含空格的城市名称
4)末尾的日期一定要隔离删除
我感觉必须使用正则表达式,但我非常希望有一种不同的方法来解决这个问题。提供的示例就是这样,来自更大数据集的示例。如果需要,我可以提供完整的数据集。
我的问题更直接的版本:鉴于上面的数据,我可以使用哪些概念/程序来智能地将字符串元素解析为自己的变量?
如果必须使用 RegEx,我需要多个表达式吗?
提前感谢您的帮助!
编辑:为了为解决方案提供多种途径,我还将解释总体问题。此数据是一个 RSS/XML 项的返回。上面提到的字符串是体育赔率,都包含在我正在使用的提要的标题节点中。如果有人有更好的用于体育赔率的 XML / RSS 提要,我也会为此欣喜若狂。
编辑 2:感谢回复,我可以运行与所需数据点匹配的 RegEx。我现在无法遍历匹配项并正确返回它们。我已将 RegEx 加载到它自己的函数中:
function regExExtract (txt){
var exp = /([^|\d]+) ([-\d.]+ [A-Z]) (\([^)]+\)) ([-\d.]+) (\([^)]+\))?/g;
var comp_arr = exp.exec(txt);
return comp_arr;
}
它的调用方式是:
var title_arr = regExExtract(title);
标题加载了上面列出的数据字符串。我假设我正确使用了全局标志以确保考虑所有匹配项,但我不确定我是否正确加载了匹配项。我为我的无知道歉,这对我来说是全新的。
按照下面的要求,我的预期输出最终是一个表格,每个城市都有一行,以及它的后续数据。每行中的每个单元格对应一个数据点。
我已经用我所做的创建了一个 JS Fiddle,预期的输出是什么: http://jsfiddle.net/vDkQD/2/
可能的最终编辑:在 Robin 和 rewt 的帮助下,我想出了:
http://jsfiddle.net/hMJx3/
【问题讨论】:
-
您无法更改我想的字符串的格式?这对于自动解析来说太可怕了(但并非不可能)。
-
正确,我无法更改字符串的格式。它是从一个 XML Feed 文件中返回的,在该文件中,所有数据都放入了 title 节点。这是一场可怕的噩梦。
-
你能准确地显示你想要的输出吗?
标签: javascript jquery regex string parsing