我有一个文本字符串,可以是任意数量的字符,我想在最后添加订单号。然后,当我需要再次使用它时,我可以摘下订单号。由于数字可能是可变长度,我想做一个正则表达式,在=
?order_num=
符号之后捕捉所有内容
所以整个字符串都是
"aijfoi aodsifj adofija afdoiajd?order_num=3216545"
我试过使用在线正则表达式生成器,但没有运气。有人可以帮我提取最后的数字并将它们放入变量中,并将?order_num=203823
之前的数字放入其自己的变量中。
我会发布一些自己的尝试,但我预见到失败和混乱。
答案 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];
但请记住,正则表达式慢。尽可能使用indexOf
和substring
/ 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 afdoiajd
和
n[1]
= 3216545
答案 2 :(得分:2)
您可以从?
的第一个实例开始子串,然后使用正则表达式来消除表达式中的大多数复杂性,并提高性能(无论如何这可能是微不足道的,除非您有所担心正在进行数千次迭代)。此外,这将在查询字符串中的任何位置匹配order_num=
,而不一定只在查询字符串的最后。
var match = s.substr(s.indexOf('?')).match(/order_num=(\d+)/);
if (match) {
alert(match[1]);
}