有一段时间我一直试图理解JavaScript中的正则表达式,但它非常复杂。您可以告诉我如何使用正则表达式从下面的URL中单独兑换每个值?
网址
/first/middle/last
返回
var first = "first"
var middle = "middle"
var last = "last"
谢谢!
答案 0 :(得分:3)
使用字符串的拆分方法肯定更容易,但是这是使用正则表达式进行学习的一种方法:
var url = '/first/middle/last';
var regex = /^\/(.+)\/(.+)\/(.+)$/;
regex.exec(url); // ["/first/middle/last", "first", "middle", "last"]
为了帮助您理解这个正则表达式(并且希望一般都是正则表达式),让我们更详细地看一下它。
第一个和最后一个斜杠(/
)标记RegExp对象的开头和结尾(不包括现在可能没有的修饰符),就像"
和{{1标记字符串的开头和结尾。
开头的'
字符表示“字符串的开头”,因此这意味着此正则表达式的匹配必须位于字符串的开头。
末尾的^
字符表示“字符串结束”,因此匹配必须结束字符串的结尾。这与开头的$
字符相结合意味着匹配必须覆盖整个字符串。
正则表达式的其余部分是^
部分三次。前两个字符(\/(.+)
)只是匹配斜杠。我们无法直接将斜杠与\/
匹配,因为这将结束正则表达式,因此我们使用反斜杠将其转义。 /
部分匹配除换行符(.+
)之外的任何字符一次或多次(.
)。该部分周围的括号称为捕获括号,并记住它们捕获的字符串,换句话说,它们会在结果数组中出现+
,"first"
和"middle"
。
所以整个正则表达式匹配“字符串的开头,斜杠,一个或多个字符(记住这些),斜杠,一个或多个字符(记住这些),斜杠,一个或多个字符(记住这些),字符串的结尾”
您可以在例如MDN's RegExp documentation的正则表达式中找到有关特殊字符(点,加号,括号,反斜杠等)的更多信息。
答案 1 :(得分:1)
我不知道这是否能回答你的问题,但是你想要实现的目标最好是通过拆分完成:
var parts = "/first/middle/last".split("/");
var first = split[1];
var middle = split[2];
var last = split[3];
请注意,索引将从0
开始,但在第一次出现拆分字符串之前将包含任何内容。在您的示例中,这只是一个空字符串,因为字符串以斜杠开头。
答案 2 :(得分:1)
只需使用split()
var mystring = "/first/middle/last"
var mysplitstring = mystring.split("/");
var first = mysplitstring[1];
var middle = mysplitstring[2];
var last = mysplitstring[3];
答案 3 :(得分:1)
我认为你应该使用split()
来做这类事情,但如果你真的想使用regexp
,你可以这样做:
var url = "/first/middle/last";
var reg = /\/(.*)\/(.*)\/(.*)/;
var matches = reg.exec(url);
// matches[0] == first
// matches[1] == middle
// matches[2] == last
答案 4 :(得分:1)
在这里,试试这个:
var string = "/first/middle/last";
var pattern = /([^\/]+)/g;
var result = string.match(pattern);
for (var i = 0; i < result.length; ++i) {
var value = result[i];
alert(value);
}
另外,您可以查看此demo
答案 5 :(得分:1)
这不会回答您的问题,但您可以使用this非常棒的工具来生成和测试正则表达式。当我需要使用regEx时它总是派上用场。