【问题标题】:Reg Expression - In javascript how can I get the 2nd instance?正则表达式 - 在 javascript 中,我如何获得第二个实例?
【发布时间】:2014-03-26 09:00:23
【问题描述】:

我有一个类似的字符串:

some people may work for some thing new.

我需要使用 javascript reg exp 获取单词“some”的第二个实例。

我怎样才能得到它?

这是我的尝试:

var text = "some people may work for some thing new";

var patt = /some/.test(text);

console.log(patt);

但我在控制台中得到了简单的“真实”。但我需要得到安慰。 (甚至我也可能需要更换)。

有人帮帮我吗?

【问题讨论】:

  • 你还没有搜索堆栈溢出
  • .test 将返回 boolean 值(真/假)而不是使用 .exec/.match
  • 使用some 得到some 这个词是没有意义的。你的目的到底是什么?测试字符串是否包含两个some
  • console.log('some') 怎么样? :)

标签: javascript regex


【解决方案1】:

您需要在正则表达式中使用.match,并且还需要将 g 标志用于全局

var text = "some people may work for some thing new";
var patt = /some/g;
var matches = text.match(patt);
console.log( matches );
console.log( matches[1] );

会给你一个包含单词some的所有实例的数组

【讨论】:

    【解决方案2】:
    var text = "some people may work for some thing new";
    
    var patt = text.match(/some/g);
    
    console.log(patt);
    

    将为您提供要在句子中找到的单词的所有实例。 然后你可以简单地使用 replace 类似的。

    假设您要搜索并替换第二个单词some。 那么就看this问题

    除此之外,您还可以执行以下操作:

    function doit(str, tobereplaced, occurence, withwhat){
    
    var res = str.split(tobereplaced);
    console.log(res);
    var foo = []
    for (var i = 0; i < occurence; i++) {
       foo.push(res[i]);
    }
    
    var bar = []
    for (var j = occurence; j < res.length; j++) {
       bar.push(res[i]);
    }
    
    return foo.join("")+withwhat+bar.join("");
    }
    
    var str = "ssfds some people may work for some thing new some thing again some again";
    doit(str, "some", 2, "bomb");
    

    【讨论】:

      【解决方案3】:

      您可以使用字符串的match 方法获取所有出现的数组:

      text.match(/some/g)
      

      您需要在正则表达式中添加 'g' 标志,否则匹配将在第一次命中后停止

      【讨论】:

        【解决方案4】:

        这是替换第二个实例的方法:

        'some people may work for some thing new.'.replace(/(\bsome\b.*?)\bsome\b/, "$1foo");
        //=> some people may work for foo thing new.
        

        【讨论】:

          【解决方案5】:

          使用函数exec(text) 支持test(text)

          替换你的代码:

          var patt = /some/.test(text);
          

          到:

          var patt = /some/.exec(text);
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-11-12
            • 2010-09-07
            • 1970-01-01
            • 2015-03-29
            • 1970-01-01
            相关资源
            最近更新 更多