正则表达式匹配以排除开头的单词

时间:2014-03-10 20:23:23

标签: javascript regex

如何制作以下JavaScript

'id=d41c14fb-1d42&'.match(/(?![id=])(.*)[^&]/)[0]

返回“d41c14fb-1d42”?它目前返回“41c14fb-1d42”,没有开头“d”。

1 个答案:

答案 0 :(得分:0)

这应该这样做:

'id=d41c14fb-1d42&'.match(/^id=(.*)&$/)[1]
// "d41c14fb-1d42"

〜编辑

当原始问题没有提供任何上下文时,很难猜测出你需要什么,在这种情况下,我只提供一个产生请求输出的解决方案。我现在明白你希望能够解析一个查询字符串,即name1=value1&name2=value2...。以下正则表达式产生nameX后跟可选的=valueX,因为我认为只在查询字符串中提供没有值的参数是有效的。

var parameters = "id=foobar&empty&p1=javascript&p2=so".match(/\w+(=([^&]+))?/g)
// ["id=foobar", "empty", "p1=javascript", "p2=so"]

您可以拆分“=”分别获取参数和值。

var param1 = parameters[0].split("=")
// ["id", "foobar"]

对于没有值的参数,当然只会产生具有1值的数组。

"empty".split("=") // ["empty"]

请注意,这假设查询参数与\w+匹配,如果在其他情况下您必须展开正则表达式。

如果您只想在查询字符串中的任何位置专门匹配id参数并获取其值,正如我从下面的评论中推断出的那样,您可以使用:

"id=donald".match(/(?:^|&)id=([^&]+)/)[1]
// "donald"
"param1=value1&id=donald&param2=value2".match(/(?:^|&)id=([^&]+)/)[1]
// "donald"