JavaScript:如何使用正则表达式从URL中提取字符串

时间:2013-07-29 14:53:27

标签: javascript regex url

在java中,我将此URL作为字符串:

window.location.href = 
"http://localhost:8080/bladdey/shop/c6c8262a-bfd0-4ea3-aa6e-d466a28f875/hired-3";

我想创建一个javascript正则表达式来提取以下字符串:

c6c8262a-bfd0-4ea3-aa6e-d466a28f875

要查找文本的左手标记,我可以使用正则表达式:

window\.location\.href \= \"http\:\/\/localhost:8080\/bladdey\/shop\/

但是,我不知道如何找到它与/hired3"

之间的文字

使用javascript从URL中提取该字符串的最佳方法是什么?

6 个答案:

答案 0 :(得分:2)

您可以将字符串拆分为标记,并查找包含4次-的字符串。

或者,如果基数始终相同,则可以使用以下代码:

String myString = window.location.href;
myString = myString.substring("http://localhost:8080/bladdey/shop/".Length());
myString = myString.subString(0, myString.indexOf('/'));

答案 1 :(得分:1)

使用前瞻和后视,

(?<=http://localhost:8080/bladdey/shop/).+?(?=/hired3)

查看here了解详情。

此外,无需转义:/字符。

答案 2 :(得分:1)

您可以使用capturing groups提取字符串的某些内容。 在你的情况下:

   Pattern pattern = Pattern.compile("(http://localhost:8080/bladdey/shop/)(.+)(/hired-3)");
    Matcher matcher = pattern.matcher(string);
    if(matcher.matches()){
       String value = matcher.group(2);
    }

答案 3 :(得分:1)

你需要一个正则表达式,以及一些使用它的方法......

  String theLocation = "http://localhost:8080/bladdey/shop/c6c8262a-bfd0-4ea3-aa6e-d466a28f8752/hired-3";
  String pattern = "(?</bladdey/shop/).+?(?=/hired3)";

  // Create a Pattern object
  Pattern r = Pattern.compile(pattern);

  // Now create matcher object.
  Matcher m = r.matcher(line);
  if (m.find( )) {
     System.out.println("Found value: " + m.group(0) );
  } else {
     System.out.println("NO MATCH");
  }

注意 - 当您更改主机(它只查找bladdey/shop/

时,这仍然有效

答案 4 :(得分:1)

String param = html.replaceFist("(?s)^.*http://localhost:8080/bladdey/shop/([^/]+)/hired-3.*$", "$1");

if (param.equals(html)) {
    throw new IllegalStateException("Not found");
}
UUID uuid = new UUID(param);

在正则表达式中:

  • (?s). char通配符也匹配换行符。
  • ^文字开头
  • $文字结尾
  • .*零个或多个(*)任何(。)字符
  • [^...]+一个或多个(+)字符不是(^)是......

在第一个括号之间替换$1

答案 5 :(得分:0)

好吧,如果你想从任何东西中取出GUID:

var regex = /[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{11,12}/i

它应该是{12}但是在你的网址中它是格式错误的,只有15.5个字节的信息。