1

老实说,当谈到更高级或更冗长的正则表达式时,我有点迷茫。我有一个查询字符串,我需要匹配并获取查询参数的值和名称。对我来说困难在于该值可以是不同的值,目前只有 4 个不同的查询参数。这是一个示例查询字符串:

foo title:"Foo Bar" -title:other author: (mitchell* OR mike) from:2012-01-01 to: 2012-06-01

查询参数是标题、作者、从和到。这三个不同的值在双引号“Foo Bar”内,用括号括起来(mitchell* OR mike)或单个值 2012-01-01 或其他。请注意,冒号后面还有一个可选空格。在每个参数名称 -title 之前也可以有一个 + 或 -。标题和作者值可以有通配符。

我目前对解析值不感兴趣,就像我不需要解析(mitchell* 或 mike)来知道其中的内容,只想将其作为一个整体显示。

我如何使用 Regex 解析此字符串以获取与它相关的参数名称的值?

我可以处理如下结果:

['title:"Foo Bar"', '-title:other', 'author: (mitchell* OR mike)', 'from:2012-01-01', 'to:2012-06-01']

我不需要担心没有参数名称的值,例如开头的 foo (可能在字符串中的任何位置),只需要获取参数名称和值。

4

2 回答 2

1

约瑟夫是对的。您提供的数据非常混乱,在一个正则表达式中制作它太复杂了,IMO,我能想到的最好方法是应用 3 种不同的表达式,每种您要搜索的类型一个:

这将搜索以左括号开头的项目:

-?\w+:\s*\((.*?)\)

这将搜索以双引号开头的项目:

-?\w+:\s*"(.*?)"

这将搜索其他项目(带空格的项目不起作用):

-?\w+:\s*([^\s"\(]+)

可能有一种更简单的方法,但这是我要做的方式。

于 2012-08-06T16:07:38.863 回答
0

这个正则表达式做了我想要的:

/-?\w+:\s*([^\s"\(]+|"(.*?)"|\((.*?)\))/g

回报:

["title:"Foo Bar"", "-title:other", "author: (mitchell* OR mike)", "from:2012-01-01", "to: 2012-06-01"]

我想要的!

于 2012-08-06T22:13:09.857 回答