gpt4 book ai didi

javascript - Javascript 中的复杂字符串解析

转载 作者:行者123 更新时间:2023-11-30 12:47:57 26 4
gpt4 key购买 nike

我正在尝试用 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) 每个值都必须加载到它们自己的变量中(即:迈阿密、2.5 O、(207.5) 等的单独变量)
2) 字符串必须在管道字符处拆分(我使用 .split("| ") )
3) 我正在处理包含空格的城市名称
4) 末尾的日期必须隔离并去掉

我觉得必须使用正则表达式,但我真的希望有一种不同的方法来解决这个问题。提供的示例只是一个来自更大数据集的示例。如果需要,我可以提供完整的数据集。

我的问题的更直接版本:鉴于上述数据,我可以使用哪些概念/过程来智能地将字符串元素解析为它们自己的变量?

如果必须使用 RegEx,是否需要多个表达式?

预先感谢您的帮助!

编辑:为了提供解决方案的多种途径,我还将解释总体问题。此数据是 RSS/XML 项目的返回。上面提到的字符串是体育赔率,并且都包含在我正在使用的提要的标题节点中。如果有人有更好的体育赔率 XML/RSS 提要,我也会欣喜若狂。

编辑 2:感谢回复,我可以运行匹配所需数据点的正则表达式。我现在无法遍历匹配项并正确返回它们。我将 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/

最佳答案

不会像这样的正则表达式

/([^|\d]+) ([-\d.]+ [A-Z]) (\([^)]+\)) ([-\d.]+) (\([^)]+\))?/g

有戏吗?显然,这是基于您提供的示例字符串,如果还有其他可能的模式,则应该更新……但如果它是那个固定的,那就没那么复杂了。

之后,您只需为每场比赛浏览捕获的组,您的数据就会被解析。有趣的现场演示:http://regex101.com/r/kF5zD3

解释

  • [^|\d] 除了管道或数字之外的所有内容。这是为了解决 [a-zA-Z ] 可能无法识别的奇怪城市名称
  • [-\d.] 一个数字、一个点或一个连字符
  • \([^)]+\) 左括号,不是右括号的所有内容,右括号。

正则表达式的快速不完整指针

  • 这里,正则表达式是/之间的部分。之后的 g 是一个标志,多亏了它,正则表达式在命中第一个匹配项后不会停止,并将返回每个匹配项
  • 匹配项是整个表达式将找到的内容。在这里,匹配将是字符串中两个 | 之间的所有内容。捕获组是一个非常有用的工具,它允许您从该匹配项中提取数据:它们由括号分隔,括号是正则表达式中的一个特殊字符。 (a)b 将匹配 ab,此匹配的第一个捕获组将是 a
  • [...] 是指里面的每个字符都可以。 [abc] 将匹配 abc
  • + 是量词,另一种特殊字符,意思是“我之前的一个或多个”。 a+ 表示“一个或多个 a 并将匹配 aaaaa
  • \d[0-9] 的快捷方式(是的,-[...]。这就是为什么在 [-\d.] 中,它等同于 [-0-9.], 它直接跟在左括号之后)
  • 因为圆括号是特殊字符,当您真正想要匹配圆括号时,您需要转义:正则表达式 (\(a\))b 将匹配 (a)b,本次匹配的第一个捕获组将是带括号的(a)
  • ? 表示前面的内容是可选的(零个或一个实例)
  • ^ 放在 [...] 语句的开头时表示“除了括号中的所有内容”。 [^a]+ 将匹配 bcd-*ù 但不匹配 aa

如果您真的对正则表达式一无所知,因为我相信它们是适合您的情况的工具,我建议您快速浏览一下 tuto,以便更好地了解您正在处理的内容。设置标志、遍历匹配及其各自捕获的组的方式将取决于您的语言以及您调用正则表达式的方式。

关于javascript - Javascript 中的复杂字符串解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21922840/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com