【问题标题】:Get multiple substring between two characters javascript [duplicate]获取两个字符之间的多个子字符串javascript [重复]
【发布时间】:2020-09-29 04:34:06
【问题描述】:

我将this post 作为他们建议此解决方案的参考:

当前

Str = 'MyLongString:StringIWant;'

期望的输出

newStr = 'StringIWant'

解决方案

var mySubString = str.substring(
    str.lastIndexOf(":") + 1, 
    str.lastIndexOf(";")
);

但是如果我有多次发病怎么办?就我而言,我的文字很长,可以说:

str = 'MyLongString has :multiple; words that i :need; to :extract;'

新的期望输出:

strarray = ["multiple","need","extract"]

当我应用建议的解决方案时,它只是得到最后一个词“提取”

【问题讨论】:

    标签: javascript regex string substring lastindexof


    【解决方案1】:

    这是一种方法,从字符串的开头到结尾运行一个循环,并使用indexOfsubstring 来获得所需的结果

    const str = 'MyLongString has :multiple; words that i :need; to :extract;';
    
    function extractWords(str) {
        const words = [];
        for (let i = 0; i < str.length; i++) {
            if (str.charAt(i) === ':') {
                const stopIndex = str.indexOf(';', i);
                if (stopIndex !== -1)
                    words.push(str.substring(i + 1, stopIndex));
            }
        }
        return words;
    }
    
    console.log(extractWords(str));

    【讨论】:

      【解决方案2】:

      链接的建议实际上是使用字符串函数而不是常规模式;多亏了/g 标志,/:\w+;/g 这样的简单模式为我们提供了所有想要的单词。

      我们可以使用lookarounds 去掉前置和后缀,但是,它们可能不适用于所有 JavaScript 环境(但实际上现在问题不大,因为所有主流浏览器都支持后置 (?&lt;=..) 运算符他们的最新版本,并且永远支持前瞻(?=..))。

      str = 'MyLongString has :multiple; words that i :need; to :extract;'
      let result = str.match(/:\w+;/g) || [];
      console.log(result);
      
      let result2 = str.match(/(?<=:)\w+(?=;)/g) || [];
      console.log(result2);

      【讨论】:

      • 它与这个例子一起工作,如果我想在“[”和“]”之间寻找子字符串怎么办?让 result2 = str.match(/(?
      • @ChristopherMartinez 是的,但是,您可能需要使用反斜杠转义某些正则表达式特殊字符,例如括号,例如(?&lt;=\[)\w+(?=])
      • (/(?&lt;=\[)\w+(?=\])/g) || []; 它不工作,我错过了什么?
      • 不确定什么是“不工作”,但正则表达式很好,请参阅:regex101.com/r/x0mtg8/1
      • 此代码适用于所有人。让 result2 = str.match(/(?
      猜你喜欢
      • 1970-01-01
      • 2014-04-02
      • 2013-01-29
      • 1970-01-01
      • 2013-09-12
      • 1970-01-01
      • 2015-10-09
      • 2020-01-09
      • 1970-01-01
      相关资源
      最近更新 更多