如何使用正则表达式获取子字符串

时间:2014-08-26 19:35:14

标签: javascript regex string

我正在尝试使用正则表达式从网址中获取一些值。由于我不熟悉,我希望有人可以指导我。

我有一个网址,我试图操纵这样的样子。

var urlString = "/myMessages/v2/messages/I15/parts/0"

我想要得到的值是I15和0。 这些值可以是任何东西,但urlString的格式将保持不变。获得这些价值的最佳和最有效的方法是什么?

6 个答案:

答案 0 :(得分:2)

我建议使用比目前提出的解决方案更强大的解决方案:

var urlString = "<url string coming in some undetermined order>";
var parts = urlString.split('/');
var map = {};
for (var i = 0; i < parts.length; i += 2) {
  map[parts[i]] = parts[i+1];
}

通过这种方式,您的值与关键值一起存储,您可以以任何方式设置它们。

所以说你的网址是/myMessages/v2/partnum/2/messages/I18/thing/splund/foo/bar,你想要partnumthingfoo的值,但你不一定知道他们&# 39;按照我刚刚放在那个网址中的顺序。使用我建议的方法,您可以使用以下方法访问它们的值:

var partnum = map['partnum'] // '2'
var thing = map['thing']     // 'splund'
var foo = map['foo']         // 'bar'

答案 1 :(得分:2)

我不确定我会使用正则表达式。我会创建一个自定义函数来处理这种类型的URL:

function handleUrlTokens(url){
  var parts = url.split('/').filter(function(o){return o!==''})
  var params = {};
  for (var i = 0; i < parts.length; i+=2) {
    param[parts[i]] = parts[i+1];
  }
  return params;
}
handleUrlTokens("/myMessages/v2/messages/I15/parts/0") //Object {myMessages: "v2", messages: "I15", parts: "0"}

这样就可以处理许多不同类型的url,只要约定是/ key / value / key / value。

编辑,因为revenProdigalKnight的循环比我的好。

答案 2 :(得分:1)

对于这个简单的事情,一个简单的解决方案是改为使用split

var urlString = "/myMessages/v2/messages/I15/parts/0";
var parts = urlString.split('/');
var value1 = parts[4]; // "I15"
var value2 = parts[6]; // "0"

只要您确切知道在您感兴趣的部分之前会出现多少/个字符,这样就可以正常工作。

如果您也知道该网址始终以"/myMessages/v2/messages/"开头,那么您可以提高效率:

var urlString = "/myMessages/v2/messages/I15/parts/0";
var substring = urlString.substr(24), 
    i = substring.indexOf('/'),
    j = substring.indexOf('/', i);
var value1 = substring.substr(0, i);  // "I15"
var value2 = substring.substr(j + 1); // "0"

然而,效率确实不应该是您的首要任务。您应该优化可读性。

答案 3 :(得分:0)

\/messages\/([^\/]+)\/parts\/(.*)

然后使用第一个和第二个匹配的组。

答案 4 :(得分:0)

var first = urlString.split('/')[4];
var second = urlString.split('/')[6];

请注意,如果订单已更改,则无法使用此功能。

答案 5 :(得分:0)

var urlString = "/myMessages/v2/messages/I15/parts/0"
var reqArray = urlString.split('/');

console.log(reqArray[4],reqArray[6]);

与正则表达式相比,这是更好的方法。

它适用于我!!