0

我试图匹配6c81748b9239e96e每次随机的字符串。使用下面的代码。我的问题是它匹配整个字符串,我只需要包含字母和数字的随机字符串。

细绳

<a href="playgame.aspx?gid=4&tag=6c81748b9239e96e">Play</a>

正则表达式

string.match(/\&tag\=[A-Za-z0-9]+\"\>/i);
4

4 回答 4

1

您可以使用正则表达式组进行匹配,然后访问您所追求的模式。您需要使用的正则表达式是这样的:/\&tag\=([A-Za-z0-9]+)\"\>/i. 圆括号 (()) 将表示您要捕获的组。然后,您可以访问捕获组,如此处所示。

编辑:仔细检查后,您似乎可能使用了不正确的正则表达式。我不太习惯 Javascript 正则表达式,但似乎您正在转义&and=>,这不是必需的。试试这个:/&tag=([A-Za-z0-9]+)\">/i

于 2012-06-06T10:21:29.143 回答
1

这是我的建议:

  1. 将@Artem Barger 提供的代码段添加到您的代码中:https ://stackoverflow.com/a/901144/851498 不过,您需要稍微修改它(添加str参数):

    function getParameterByName( name, str )
    {
        name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
        var regexS = "[\\?&]" + name + "=([^&#]*)";
        var regex = new RegExp(regexS);
        var results = regex.exec( str );
        if(results == null)
            return "";
        else
          return decodeURIComponent(results[1].replace(/\+/g, " "));
    }
    
  2. 以这种方式使用它:

    var str = getParameterByName( 'tag', string );
    

Jsfiddle 演示:http: //jsfiddle.net/Ralt/u9MAv/

于 2012-06-06T10:21:36.857 回答
0
var myregexp = /(&tag=)([A-Za-z0-9]+)\b/img;
var match = myregexp.exec(subject);
while (match != null) {
    for (var i = 0; i < match.length; i++) {
        // matched text: match[i]
    }
    match = myregexp.exec(subject);
}
于 2012-06-06T10:25:04.373 回答
0

你的正则表达式

&tag=([A-Za-z\d]+)"

它被简化了(你逃脱了太多)并添加了括号以将你想要的东西放在第 1 组中

在 javascript 中,这变成

var myregexp = /&tag=([A-Za-z\d]+)"/;
var match = myregexp.exec(subject);
if (match != null) {
    result = match[1];
} else {
    result = "";
}

解释

Match the characters “&amp;tag=” literally «&tag=»
Match the regular expression below and capture its match into backreference number 1 «([A-Za-z\d]+)»
   Match a single character present in the list below «[A-Za-z\d]+»
      Between one and unlimited times, as many times as possible, giving back as needed (greedy) «+»
      A character in the range between “A” and “Z” «A-Z»
      A character in the range between “a” and “z” «a-z»
      A single digit 0..9 «\d»
Match the character “"” literally «"»
于 2012-06-06T10:29:55.290 回答