正则表达式 - 在某些字符串后获取数字

时间:2012-06-04 22:40:46

标签: javascript regex

我有一个文本字符串,可以是任意数量的字符,我想在最后添加订单号。然后,当我需要再次使用它时,我可以摘下订单号。由于数字可能是可变长度,我想做一个正则表达式,在=

中的?order_num=符号之后捕捉所有内容

所以整个字符串都是

"aijfoi aodsifj adofija afdoiajd?order_num=3216545"

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

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

3 个答案:

答案 0 :(得分:19)

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);

答案 1 :(得分: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

答案 2 :(得分:2)

您可以从?的第一个实例开始子串,然后使用正则表达式来消除表达式中的大多数复杂性,并提高性能(无论如何这可能是微不足道的,除非您有所担心正在进行数千次迭代)。此外,这将在查询字符串中的任何位置匹配order_num=,而不一定只在查询字符串的最后。

var match = s.substr(s.indexOf('?')).match(/order_num=(\d+)/);
if (match) {
  alert(match[1]);
}