javascript中的正则表达式匹配可以匹配相同运算符后的任何单词吗?

时间:2012-03-04 16:26:39

标签: javascript jquery regex

我试图在此声明中定位?state=wildcard

?state=uncompleted&dancing=yes

我想定位整行?state=uncomplete,但也允许它找到=运算符之后的任何单词。所以不完整也可以完成,不计划,或者你有什么。

我得到的一个警告是,我可以在<&em>&符号之前定位通配符,但是如果没有符号并且param state本身就是什么呢?

4 个答案:

答案 0 :(得分:5)

试试这个正则表达式:

var regex = /\?state=([^&]+)/;
var match = '?state=uncompleted&dancing=yes'.match(regex);
match; // => ["?state=uncompleted", "uncompleted"]

它会匹配字符串“\?state =”之后的每个字符,除了一个与号之外,如果有必要,一直到字符串的结尾。

答案 1 :(得分:2)

替代正则表达式:/\?state=(.+?)(?:&|$)/

它将匹配第一个&字符或字符串结尾

的所有内容

答案 2 :(得分:2)

恕我直言,你这里不需要正则表达式。众所周知,正则表达式往往很慢,特别是在使用前瞻时。为什么不这样做:

var URI = '?state=done&user=ME'.split('&');
var passedVals = [];

这给了我们['?state = done','user = ME'],现在只做一个for循环:

for (var i=0;i<URI.length;i++)
{
    passedVals.push(URI[i].split('=')[1]);
}

传递的瓦尔斯将包含你需要的任何东西。这样做的另一个好处是您可以将请求解析为对象:

var URI = 'state=done&user=ME'.split('&');
var urlObjects ={};
for (var i=0;i<URI.length;i++)
{
    urlObjects[URI[i].split('=')[0]] = URI[i].split('=')[1];
}

我遗漏了'?'在字符串的开头,因为一个简单的.replace('?','')可以轻松修复...

答案 3 :(得分:1)

您可以匹配不是&的任意数量的字符。如果根本没有&,那当然也会有效:

/(\?state=[^&]+)/.exec("?state=uncompleted");
/(\?state=[^&]+)/.exec("?state=uncompleted&a=1");

// both: ["?state=uncompleted", "?state=uncompleted"]