【问题标题】:Get everything after the dash in a string in JavaScript在 JavaScript 中的字符串中获取破折号后的所有内容
【发布时间】:2009-02-21 14:47:18
【问题描述】:

在 IE 和 Firefox 中都可以使用的最简洁的方法是什么?

我的字符串看起来像这样sometext-20202

现在sometext 和破折号后面的整数可以有不同的长度。

我应该只使用substring 和 index of 还是有其他方法?

【问题讨论】:

    标签: javascript


    【解决方案1】:

    我会怎么做:

    // function you can use:
    function getSecondPart(str) {
        return str.split('-')[1];
    }
    // use the function:
    alert(getSecondPart("sometext-20202"));
    

    【讨论】:

    • 如果字符串是sometext-20202-303,这个函数就不起作用了,不是特别值得一提吗?
    • @IstiaqueAhmed 如果问题不是专门针对非常具体的格式:“我的字符串看起来像这样:sometext-20202”
    • 问题确实有get everything after the dash in a string in javascript,在这种情况下,它会失败。
    • 简单的功能,救了我。
    【解决方案2】:

    我更喜欢的解决方案是:

    const str = 'sometext-20202';
    const slug = str.split('-').pop();
    

    slug 将是您的结果

    【讨论】:

    • 如果您使用多个分隔符,此解决方案是最好的。
    【解决方案3】:
    var testStr = "sometext-20202"
    var splitStr = testStr.substring(testStr.indexOf('-') + 1);
    

    【讨论】:

    • 我觉得这对于我想要完成的事情来说非常简单明了。谢谢。
    • 喜欢,很简单
    【解决方案4】:
    var the_string = "sometext-20202";
    var parts = the_string.split('-', 2);
    
    // After calling split(), 'parts' is an array with two elements:
    // parts[0] is 'sometext'
    // parts[1] is '20202'
    
    var the_text = parts[0];
    var the_num  = parts[1];
    

    【讨论】:

      【解决方案5】:

      AFAIK,substring()indexOf() 均受 Mozilla 和 IE 支持。但是,请注意,某些浏览器的早期版本(尤其是 Netscape/Opera)可能不支持 substr()。

      您的帖子表明您已经知道如何使用substring()indexOf(),所以我没有发布代码示例。

      【讨论】:

      • 这实际上是比拆分更好的解决方案,具体取决于您的应用程序,因为如果您有多个 - 您可能会得到不希望的后果。
      • string.substring(string.indexOf('-') + 1)
      • indexOf 在 IE8 及以下版本中不存在,尽管 polyfills 存在。
      【解决方案6】:

      使用内置的javascriptreplace()函数和正则表达式(/(.*)-/),您可以用空字符串(“”)替换破折号之前的子字符串:

      "sometext-20202".replace(/(.*)-/,""); // result --> "20202"
      

      【讨论】:

        【解决方案7】:
        myString.split('-').splice(1).join('-')
        

        【讨论】:

        • 也可以是:myString.split('-').splice(-1).join('-')
        【解决方案8】:

        我提出这个问题是因为我需要 OP 的要求,但比其他答案提供的更多(它们在技术上是正确的,但对于我的目的来说太少了)。我已经制定了自己的解决方案;也许它会帮助别人。

        假设您的字符串是'Version 12.34.56'。如果您使用'.' 进行拆分,则其他答案往往会给您'56',而您真正想要的是'.34.56'(即从第一次 出现而不是最后一次出现的所有内容,但 OP 的具体情况恰好只发生了一次)。也许你甚至可能想要'Version 12'

        我也写了这个来处理某些失败(比如如果null 被传递或一个空字符串等)。在这些情况下,以下函数将返回 false

        使用

        splitAtSearch('Version 12.34.56', '.') // Returns ['Version 12', '.34.56']
        

        功能

        /**
         * Splits string based on first result in search
         * @param {string} string - String to split
         * @param {string} search - Characters to split at
         * @return {array|false} - Strings, split at search
         *                        False on blank string or invalid type
         */
        function splitAtSearch( string, search ) {
            let isValid = string !== ''              // Disallow Empty
                       && typeof string === 'string' // Allow strings
                       || typeof string === 'number' // Allow numbers
        
            if (!isValid) { return false } // Failed
            else          { string += '' } // Ensure string type
        
            // Search
            let searchIndex = string.indexOf(search)
            let isBlank     = (''+search) === ''
            let isFound     = searchIndex !== -1
            let noSplit     = searchIndex === 0
            let parts       = []
        
            // Remains whole
            if (!isFound || noSplit || isBlank) {
                parts[0] = string
            }
            // Requires splitting
            else {
                parts[0] = string.substring(0, searchIndex)
                parts[1] = string.substring(searchIndex)
            }
        
            return parts
        }
        

        示例

        splitAtSearch('')                      // false
        splitAtSearch(true)                    // false
        splitAtSearch(false)                   // false
        splitAtSearch(null)                    // false
        splitAtSearch(undefined)               // false
        splitAtSearch(NaN)                     // ['NaN']
        splitAtSearch('foobar', 'ba')          // ['foo', 'bar']
        splitAtSearch('foobar', '')            // ['foobar']
        splitAtSearch('foobar', 'z')           // ['foobar']
        splitAtSearch('foobar', 'foo')         // ['foobar'] not ['', 'foobar']
        splitAtSearch('blah bleh bluh', 'bl')  // ['blah bleh bluh']
        splitAtSearch('blah bleh bluh', 'ble') // ['blah ', 'bleh bluh']
        splitAtSearch('$10.99', '.')           // ['$10', '.99']
        splitAtSearch(3.14159, '.')            // ['3', '.14159']
        

        【讨论】:

          【解决方案9】:

          对于那些试图在第一次出现后得到所有东西的人:

          类似于"Nic K Cage""K Cage"

          您可以使用slice 获取某个角色的所有信息。在这种情况下,从第一个空格开始:

          const delim = " "
          const name = "Nic K Cage"
          
          const result = name.split(delim).slice(1).join(delim) // prints: "K Cage"
          

          或者如果 OP 的字符串有两个连字符:

          const text = "sometext-20202-03"
          // Option 1
          const opt1 = text.slice(text.indexOf('-')).slice(1) // prints: 20202-03
          // Option 2
          const opt2 = text.split('-').slice(1).join("-")     // prints: 20202-03
          

          【讨论】:

            【解决方案10】:

            使用以下形式的正则表达式:\w-\d+ 其中,\w 代表一个单词,\d 代表一个数字。他们不会开箱即用,所以玩一下。试试this

            【讨论】:

              【解决方案11】:

              您可以使用split 方法。如果您应该从特定模式中获取字符串,您可以使用 split 和 req。 exp.:

              var string = "sometext-20202";
              console.log(string.split(/-(.*)/)[1])

              【讨论】:

              • 一般来说,如果答案包含对代码的用途的解释,以及为什么在不介绍其他人的情况下解决问题的原因,答案会更有帮助。
              【解决方案12】:

              其他人都发布了一些完全合理的答案。我采取了不同的方向。不使用 split、substring 或 indexOf。在 i.e. 和 firefox 上效果很好。可能也适用于 Netscape。

              只有一个循环和两个 if。

              function getAfterDash(str) {
                  var dashed = false;
                  var result = "";
                  for (var i = 0, len = str.length; i < len; i++) {
                      if (dashed) {
                          result = result + str[i];
                      }
                      if (str[i] === '-') {
                          dashed = true;
                      }
                  }
                  return result;
              };
              
              console.log(getAfterDash("adfjkl-o812347"));
              

              我的解决方案是高效的并且可以处理边缘情况。


              上面的代码是为了拖延工作,请不要实际使用。

              【讨论】:

                【解决方案13】:

                使用任何分隔符并获取第一部分或第二部分

                  //To divide string using deimeter - here @
                  //str: full string that is to be splitted
                  //delimeter: like '-'
                  //part number: 0 - for string befor delimiter , 1 - string after delimiter
                  getPartString(str, delimter, partNumber) {
                    return str.split(delimter)[partNumber];
                  }
                

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2022-11-21
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2019-04-18
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多