12

我有一个文本字符串,它可以是任意数量的字符,我想在末尾附加一个订单号。然后当我需要再次使用它时,我可以将订单号拔掉。由于数字可能是可变长度的,我想做一个正则表达式来捕获=字符串中符号之后的所有内容?order_num=

所以整个字符串将是

"aijfoi aodsifj adofija afdoiajd?order_num=3216545"

我尝试使用在线正则表达式生成器,但没有运气。有人可以帮我提取最后的数字并将它们放入一个变量中,然后将之前的内容?order_num=203823放入它自己的变量中。

我会发布一些我自己的尝试,但我预见到失败和混乱。

4

3 回答 3

22
var s = "aijfoi aodsifj adofija afdoiajd?order_num=3216545";

var m = s.match(/([^\?]*)\?order_num=(\d*)/);
var num = m[2], rest = m[1];

但请记住,正则表达式很。尽可能使用indexOfsubstring/ slice。例如:

var p = s.indexOf("?");
var num = s.substring(p + "?order_num=".length), rest = s.substring(0, p);
于 2012-06-04T22:44:03.420 回答
10

我认为不需要正则表达式:

var str="aijfoi aodsifj adofija afdoiajd?order_num=3216545";
var n=str.split("?");

n然后将是一个数组,其中索引 0 在?和索引 1 之后。

另一个例子:

var str="aijfoi aodsifj adofija afdoiajd?order_num=3216545";
var n=str.split("?order_num=");

会给你结果: n[0]=aijfoi aodsifj adofija afdoiajdn[1]=3216545

于 2012-06-04T22:44:47.180 回答
4

您可以从第一个实例开始子字符串?,然后使用正则表达式来摆脱表达式中的大部分复杂性,并提高性能(这可能无论如何都可以忽略不计,除非您在数千次迭代中这样做,否则无需担心) . 此外,这将匹配order_num=查询字符串中的任何点,不一定只是在查询字符串的最后。

var match = s.substr(s.indexOf('?')).match(/order_num=(\d+)/);
if (match) {
  alert(match[1]);
}
于 2012-06-04T23:06:51.293 回答