正则表达式选择所有标志,但不选择属性(javascript)

正则表达式选择所有标志,但不选择属性(javascript),javascript,regex,Javascript,Regex,在Javascript中,我有这样一个输入字符串: var str = "[header fullwidth short color =red text = big] [anotherObj flag attr=1] ..." (注意:空格是经过深思熟虑的) 我想检索对象列表,每个对象都有三个特性: 对象类型:标题 标志列表:[“全宽”、“短”、…] 属性列表:{color:“red”,text:“big”,…} 我编写了这个函数,它获取对象的类型和属性,但不获取标志(没有值的属性;

在Javascript中,我有这样一个输入字符串:

var str = "[header fullwidth short color =red    text = big] [anotherObj flag attr=1] ..."
注意:空格是经过深思熟虑的)

我想检索对象列表,每个对象都有三个特性:

  • 对象类型:标题
  • 标志列表:[“全宽”、“短”、…]
  • 属性列表:{color:“red”,text:“big”,…}
我编写了这个函数,它获取对象的类型和属性,但不获取标志(没有值的属性;即布尔值)


对于标志,请尝试以下操作:

/ (\w+)(?= [^=])/
然后删除
标题
(如take all matches,但第一个除外),因为这似乎是最简单的

快速解释:这将匹配1个或多个单词字符,前面有1个或2个非等号字符(在
[A-zA-Z!]
中),只要它们后面没有2个非等号,所有属性都是等号

编辑:我在你的帖子之前写的,所以在你拆分之前,它匹配整个字符串

编辑2:通过对chat的讨论(见下文),我意识到两边都允许使用可选空格,这在javascript中不起作用,因为缺少负lookback操作符,两边都不需要可选空格,上面的正则表达式可以工作。感谢Sharang确认了这一点(如果任何人都能想到一种方法,在两边都有一个可选的空格,并且只有一个正则表达式,那么我很有兴趣看到它,我认为这是不可能的,如上所述)

编辑3:指出属性是可选的,因此需要新的正则表达式:

/ (\w+)(?=(?: [^=])|$)/gm

基本上是一样的,但允许它后面跟着行尾。

你能告诉我们你想出了什么吗?当然,我现在就编辑它,它看起来类似于没有
的HTML开始标记。是的,但出于用户体验的原因,我选择实现“短代码”风格的语法。这是因为熟悉wordpress(即:我的目标市场)的人会习惯于这种情况。即使如此,输入:[页眉全宽短颜色=红色文本=大]你会得到[“页眉”、“全宽”、“短”、“colo”、“红色”、“tex”、“大”]的欢呼声。注意,它可以在“=”之间有空格。嗯。。。我不确定,因为在=和它的值之间有可选的空格,这没有帮助。只需再次检查,属性中的键和它的值之间是否有所需的空格?不,空格是可选的。它与html相同。例如,所有这些都是有效的:[header flag atr=1][header flag atr=1][header flag atr=1]。
/ (\w+)(?=(?: [^=])|$)/gm