请从这个字符串中提取一些信息(没有正则表达式,以便我能理解)

时间:2010-10-28 11:57:38

标签: javascript jquery parsing

在我的网络应用中,我查看了当前的网址,如果当前网址是这样的表单:

http://www.domain.com:11000/invite/abcde16989/root/index.html

- >我需要的是在另一个变量中提取由5个字母和5个数字(abcde16989)组成的ID以供进一步使用。

所以我需要这个:

var current_url = "the whole path, not just the hostname";

if (current_url has ID)
    var ID = abcde16989;

3 个答案:

答案 0 :(得分:4)

如果ID始终位于相同的位置,您可以始终使用split作为分隔符,例如

/

虽然您要求匹配“5个字母和5个数字”确实适合正则表达式匹配。

var parts = current_url.split('/');
var id = parts[4];

答案 1 :(得分:1)

我假设您不需要完整的网址,只需要获取您的ID的路径名。使用以下内容:

var current_url = window.location.pathname; //gets the pathname
var split_url = current_url.split('/'); //splits the path at each /
current_id = split_url[2]; //1st item in array is "invite", 2nd is your id, 3rd would be "root"
alert(current_id);

答案 2 :(得分:1)

首先,这不需要JQuery;这是简单的Javascript。在我回复之后,我会修改你的标签。

正则表达式实际上是实现这一目标的一种简单方法,我认为像这样的简单方法并不像你想象的那样难以理解。

所以我会用正则表达式选项回答,然后转到其他选项:

var url = "http://www.domain.com:11000/invite/abcde16989/root/index.html";

//first method:
var id = url.match('^http://www.domain.com:11000/invite/(.+)/root/index.html$')[1];/index.html$/)[1];

//second method: (if you don't know exact format of the rest of the URL but you do know the format of the ID string)
var id = url.match('/([a-z]{5}[0-9]{5})/')[1];

第一种方法将字符串放在您在URL中指定的位置。它不会检查格式;它只是查看URL的其余部分,并抓住你要求的一点点。这应该很容易理解:它基本上只是你的URL,但是(。+)你的ID在哪里。

第二种方法专门针对您要求的格式的字符串 - 即五个字母,然后是五个数字。这当然有点难以阅读,但如果你根据这些标准看一下它应该是相当自我解释的。

在这两种情况下,正则表达式本身都将返回一个结果数组,其中数组元素为整个字符串(即在第一种情况下,包括URL的其余部分)。这是(括号)进来的地方(即我们所说的位(.+))。这告诉match函数将括号的内容放入另一个数组元素中,以便我们可以使用它。在这两种情况下,这意味着我们可以读取数组元素[1]中的ID。

好的,那么非正则表达式选项如何:

事实上,在Javascript中没有正则表达式的情况下以简单的方式完成它会很困难,因为即使是简单的字符串拆分函数也使用正则表达式匹配来进行拆分(授予它将是非常简单的一个,它仍然是一个正则表达式)。其他几个人已经使用这个给你答案,但 仍然是一个正则表达式,所以从技术上讲,他们也没有准确回答你的问题。

我会猜测,实际上这些答案中的一个对你来说已经足够好了(尽管仍然有一个正则表达式元素,我或者更可能是使用split()的答案之一)。但是,如果真的不想要与regex有任何关系,那么你将不得不开始做一些稍微复杂的字符串操作,可能使用substring()(尽管还有其他方法)这样做。)

有些事情如下:

var prefixstring="http://www.domain.com:11000/invite/";
var prefixlen=prefixstring.length;
var idlen=10;

var id = url.substring(prefixlen,idlen+prefixlen);

这将获取ID前面的URL部分的长度,然后使用substring()来剪切所需的位。但我相信你会同意正则表达式选项更简单吗? ; - )

希望有所帮助。 (我希望它能帮助你减少对正则表达式的恐惧!)