具有不同值的 JavaScript/Regex 参数

JavaScript/Regex params with different values

本文关键字:JavaScript Regex 参数      更新时间:2023-09-26

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

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

查询参数包括标题、作者、发件人和收件人。这三个不同的值在双引号"Foo Bar"内,用括号(米切尔*或迈克)或单个值2012-01-01或其他值括起来。请注意,冒号后面还有一个可选空格。在每个参数名称之前也可以有一个 + 或 - -title。标题和作者值可以具有通配符。

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

我如何使用正则表达式解析此字符串以获取与之相关的参数名称的值?

我可以处理这样的结果:

['title:"Foo Bar"', '-title:other', 'author: (mitchell* OR mike)', 'from:2012-01-01', 'to:2012-06-01']
我不需要担心没有参数名称的值,例如

开头的foo(可以在字符串中的任何位置),只需要获取参数名称和值。

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

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

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

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

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

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

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

也许,有一种更简单的方法可以做到这一点,但这是我会这样做的方法。

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

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

返回:

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

如我所愿!