【问题标题】:Javascript REGEX to get 5 characters from a urlJavascript 正则表达式从 url 获取 5 个字符
【发布时间】:2014-08-23 21:42:03
【问题描述】:

如何编写正则表达式以从以下网址获取 5 个字符 572f0

我构建的正则表达式是 dep_id=([^&]*) 但这假设在值之后会有一个 & 并且我想总是匹配并检索后面的 5 个字符dep_id=

https://test.com/Chat/test?language=en_US#dep_id=572f0&org_id=00Df0&

【问题讨论】:

标签: javascript regex


【解决方案1】:

如果要匹配5个字符:

/dep_id=(.....)/

/dep_id=(.{5})/

如果要匹配到 & 或结尾:

/dep_id=([^&]+)/

您最初的正则表达式实际上是完全有效的:它不需要& 来跟随。直到& 或结束...

【讨论】:

  • 第二个带括号的字符串有什么作用? (?:&|$)
  • @AndrewShepherd,实际上,它没有用,而且 OP 的第一个正则表达式是完全有效的,他假设它需要 & 是不正确的。
  • @AndrewShepherd,它是一个非捕获组。 See here
  • @Adam:我确定 Andrew 询问的是它的用途,而不是它的句法含义 :-)
  • 这行得通。较短的版本发布在 dep_id=(.{5}) 上方的评论中
【解决方案2】:

不是正则表达式,而是

var x = "https://test.com/Chat/test?language=en_US#dep_id=572f0&org_id=00Df0&"
x.split("dep_id=")[1].substr(0,5)

【讨论】:

  • 重要提示:此解决方案依赖于字符串中 dep_id= 的存在,否则会失败并出现错误。
  • @zerkms,这很准确,但添加错误处理将是微不足道的。
  • @Adam:确实如此,但它会使代码膨胀,这将使正则表达式“更好”的解决方案。顺便说一句,如果dep_id 参数值短于 5 个字符,也不清楚该怎么办。使用正则表达式很容易处理。使用此代码 - 不会。
【解决方案3】:

要直接检索这五个字符,请使用:

var myregex = /dep_id=([^#&\s]{5})/m;
var match = myregex.exec(str);
if (match != null) {
    result = match[1];
} else {
    result = "";
}

说明

  • dep_id= 匹配文字字符
  • ([^#&\s]{5}) 捕获到第 1 组的五个字符,它们不是 &、url 片段分隔符 # 或空格

这会直接从第 1 组捕获中检索字符。

【讨论】:

  • 我当天的代表人数有限,所以我只是在观察。为编辑 +1。
  • @hwnd [^#&\s] 的原因是,如果我们只使用.{5},我们可能会开始吃掉另一个&...,或者一个url 片段#...,或者超过网址。
  • @hwnd 我听到了...我并不总是 100% 相信问题描述,所以 [^#&\s] 适合我。 :)
猜你喜欢
  • 2016-04-05
  • 1970-01-01
  • 2015-10-30
  • 2012-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多