【发布时间】:2017-07-26 02:23:02
【问题描述】:
我的输入字符串如下所示:
&hello=HI1&op=1h23&hello=&op=&hello=HI3&op=&hello=HI4&op=OP4
如果 hello 有文本,我希望捕获数据。 op 参数是可选的,可能有也可能没有值。在上面的字符串中,我想要以下输出(每一行将作为一个单独的值存储在一个数组中):
hello=HI&op=1h23
hello=HI3&op=
hello=HI4&op=OP4
我已经让它大部分工作了,但问题是如果 op 的值包含单词 'hello' 中的任何字母,则不会捕获 op 的剩余部分。正如您在上面的示例字符串中看到的,第一个 op 值是 1h23,在 h 之后,没有捕获值 23。
https://regex101.com/r/Er0kEo/2
我试过了:
/&hello=[A-z 0-9]+&op=[^&hello]*/gi
这通常有效,除非 op 的值包含单词“hello”中的任何字母。我也试过:
/&hello=[A-z 0-9]+&op=.+?(?=&hello)/gi
仅捕获第一个输入。也尝试过 (?!&hello) - 稍微好一点,但没有捕获最后的输入。尝试使用 \b 并没有走得太远,^&hello$ 也没有。
我觉得我错过了一些小事,但 5 小时后,我被打败了。
【问题讨论】:
-
是不是所有的key都和
hello一样?&op是否存在于所有值中?并且您只需要提取那些在&op之前有一些文本的内容? -
见jsfiddle.net/jqu5motj/1,它是否按预期工作?
-
@WiktorStribiżew:是的,这太完美了!它也很简单,有点惊讶我无法弄清楚/没有尝试只是 [^&]*。谢谢!
标签: javascript regex