【问题标题】:JavaScript match() regex not working as expectedJavaScript match() 正则表达式未按预期工作
【发布时间】:2016-06-19 10:25:50
【问题描述】:

我正在尝试使用 JavaScript match() 函数从字符串中获取三个数值。

字符串示例:doSomething(14754572,782339,2,'')

这是我正在使用的 JavaScript,但没有结果:

var $numbers = $onclick.match(/(\d*),(\d*),(\d)/);
var first = $numbers[0] // Should be 14754572 
var second = $numbers[1] // Should be 782339
var third = $numbers[2] // Should be 2

我猜是正则表达式不行……

【问题讨论】:

  • 正则表达式是correct。你自己写 first 然后访问 [0]th 组保存整个匹配值。请参阅jsfiddle.net/mz900rfb,其中的索引符合您的预期结果。
  • 您是否尝试定义新的 Reg 并找到 .match ?

标签: javascript regex match


【解决方案1】:

正则表达式很好,只是您对匹配数组的索引不正确。第一个条目[0] 是匹配的完整 文本(在您的情况下为"14754572,782339,2")。然后在[1][2][3] 中给出您定义的捕获组。所以你只需要调整这些索引。

var $onclick = "doSomething(14754572,782339,2,'')";
var $numbers = $onclick.match(/(\d*),(\d*),(\d)/);
console.log($numbers[1]); // 14754572 
// Note ------------^^^
console.log($numbers[2]); // 782339
// Note ------------^^^
console.log($numbers[3]); // 2
// Note ------------^^^

只是 FWIW,该正则表达式不能容忍可选的空格,因此您可以考虑在其中添加 \s*;另外,我可能会更新它以要求领先的(

// Leading ( ------------------vv
var $numbers = $onclick.match(/\(\s*(\d*)\s*,\s*(\d*)\s*,\s*(\d)/);
// Optional whitespace ----------^^^-----^^^-^^^-----^^^-^^^

【讨论】:

    【解决方案2】:

    如果您记录 $numbers,您会看到它计算为正则表达式的所有匹配项。因此,您需要做的是选择索引 1、2 和 3 而不是 0、1 和 2:

    var $numbers = $onclick.match(/(\d*),(\d*),(\d)/);
    var first = $numbers[1] // Returns 14754572 
    var second = $numbers[2] // Returns 782339
    var third = $numbers[3] // Returns 2
    console.log('1:'+first,' 2:'+second,' 3:'+third);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-28
      • 2022-01-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多