jquery - 学习正则表达式和 jquery - .match 返回什么?

标签 jquery regex

alert($(this)[0]); 返回一个 url,例如。 http://localhost/www/anotherdir/go.php?id=12aaa

我希望将“12”和“aaa”放入单独的变量中(引用的值可以是任何内容,但始终是一个数字后跟三个字母)。

使用正则表达式 /\?* 在正则表达式编辑器中返回 id=12aaa,但是...

这不会生成alert()框-什么也没有发生:

x = $(this)[0].match(/\?*/);
alert(x);

这也没有做任何事情:

x = $(this)[0].match(/\?*/);
alert(x[0]); 

最佳答案

试试这个:

var x = $(this)[0].match(/[^\?]*$/);
alert(x[0]);

假装 $(this)[0] 返回“/my/fun/path?query1=a&query2=b 请注意,x 将是数组 ["query1=a&query2=b"]

例如,如果您想要将每个查询参数作为数组中的索引获取,您可以这样做:

var params = $(this)[0].match(/[^\?]*$/)[0].split('&');

这会给你:

["query1=a", "query2=b"]

编辑为您分解正则表达式:

  • [] 是一种字符类,无论内容有多少,只能匹配一个字符。
  • 例如,
  • [a-z] 将匹配任何单个小写字母字符。
  • 字符类开头的 ^(插入符号)是非标识符。表明该字符类具有相反的效果 - 它将匹配与其余内容不匹配的任何单个字符。该位置(字符类中的第一个字符)是插入符号唯一一次指示“not”。在其他上下文中,它具有不同的含义(例如,在正则表达式的开头, ^ 将指示字符串的开头必须从那里开始)。
  • 因此,我们的字符类 [^\?] 表明我们将匹配任何不是问号的单个字符
  • 星号始终表示“前面的语句中的零个或多个”,因此当您尝试仅使用 * 表示“此处的任何内容”时,您实际上所做的是重复\?零次或多次 - 向口译员陈述“我想要问号零次或多次”。您的 alert(x[0]) 应该输出一个空对话框,稍后会详细介绍
  • 在我们的例子中,星号正在检查任何非问号,零次或多次。
  • 正则表达式末尾的 $ 表示“字符串结尾”,这意味着……当然,字符串的结尾必须位于该点。

因此我们知道正则表达式不会从您的网址收集问号,因为这样它就无法在收集多个非问号的同时到达字符串的末尾。除非另有说明,* 始终是贪婪的,因此它将获取尽可能多的字符。

你的alert(x[0])应该输出一个空警报(我测试了它,它为我做了),因为.match()方法匹配它可以的第一件事,因为/\?*/ 几乎匹配每一个可能的字符串,在看到第一个字符并说“哦,这里有一个匹配!”之后它必须停止。

希望这对您的理解有所帮助:) 当您开始使用正则表达式时,它们可能会令人困惑,但我绝对喜欢它们。太强大了。

关于jquery - 学习正则表达式和 jquery - .match 返回什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5435007/

相关文章:

jquery - 适合移动设备的 Jquery 模态框吗?

javascript - 如何从js中删除这个货币标记?

Javascript setTimeout 函数与 JQuery

regex - 为什么 sed 不打印可选组?

java - 正则表达式中的电子邮件之间允许有空格

python - 使用正则表达式抓取 HTML 表单

javascript - 用多个分隔符分割字符串并忽略引号中的分隔符 javascript

javascript - 确保文本字段以特定值 : jQuery 开头

javascript - 在不损害页面响应能力的情况下设置 col-md-* div 类之间的边距

regex - 如何在 find 命令上使用正则表达式作为名称?