2

在 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 中提取该字符串的最佳方法是什么?

4

6 回答 6

2

您可以将字符串拆分为标记,并查找出现 4 次-.

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

String myString = window.location.href;
myString = myString.substring("http://localhost:8080/bladdey/shop/".Length());
myString = myString.subString(0, myString.indexOf('/'));
于 2013-07-29T14:57:57.973 回答
1

使用前瞻和后瞻,

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

在这里查看更多信息。

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

于 2013-07-29T14:56:25.047 回答
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/

于 2013-07-29T15:01:44.530 回答
1

您可以使用捕获组来提取字符串的某些内容。在你的情况下:

   Pattern pattern = Pattern.compile("(http://localhost:8080/bladdey/shop/)(.+)(/hired-3)");
    Matcher matcher = pattern.matcher(string);
    if(matcher.matches()){
       String value = matcher.group(2);
    }
于 2013-07-29T15:00:13.563 回答
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

于 2013-07-29T15:05:32.427 回答
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 字节的信息。

于 2013-07-29T15:53:27.237 回答