【问题标题】:Substring of varying length after a specific character特定字符后不同长度的子字符串
【发布时间】:2014-08-28 19:50:34
【问题描述】:

我正在尝试获取类似于 "A_1234_5678, B_2345_678, C_3456_78" 的字符串的一部分,其中列表项的第一部分是类别,第一个下划线之后的部分是数据我需要某种形式(3456_78 或 3456 78)。

它们总是按相同的顺序排列,但并不总是存在。 例如,它也可能看起来像 "A_1234_5678, C_3456_7890"。但是假设我需要 C_ 之后的数据。它总是相同的顺序,但在列表中并不总是相同的索引。此外,数据并不总是相同的长度。所以数据的长度不同,开始的索引也不同。

有没有办法做到这一点?最好是javascript,这样我就可以在<script> 的网站中使用它。我看过 split、substr,并尝试过 indexOf 等。

【问题讨论】:

    标签: javascript string substring


    【解决方案1】:
    function getByCategory(data, category) {
        return data.split(',').map(function(x) { 
            return x.trim();
        }).filter(function(y) {
            return y.indexOf(category) === 0;
        }).shift().replace(category + '_', '');
    }
    

    用作

    var data = getByCategory('A_1234_5678, B_2345_678, C_3456_78', 'B'); //2345_678
    

    FIDDLE

    【讨论】:

      【解决方案2】:

      当然。我建议使用正则表达式。

      var stringToParse = 'C_3456_7890';
      var returnArray = stringToParse .match(/^([A-Z])_([0-9_]*)$/);
      

      这将在数组的索引 1 处具有类别字母,在索引 2 处具有数据。只要类别始终是一个大写字母并且索引仅是数字和下划线,它就可以工作。如果您让我了解更多有关可能选项的信息,我可以更新我的回复

      编辑

      要帮助处理列表中的多个项目,您应该先用逗号将其拆分

      var stringToTest = "A_1234_5678, B_2345_678, C_3456_78"
      var arrayOfStrings = stringToTest.split(',')
      for (var i = 0; i<arrayOfStrings.length; i++){
        var returnArray = arrayOfStrings[i].match(/^\s*([A-Z])_([0-9_]*)\s*$/);
        console.log(returnArray);
      }
      

      将控制台日志替换为您需要用于处理数据和类别的任何代码,然后一切顺利。

      第二次编辑

      在循环中使用的代码建议:

      if (returnArray[1] == 'C'){
        var foundData = returnArray[2];
        break;
      }
      

      所以完整的代码看起来像

      var stringToTest = "A_1234_5678, B_2345_678, C_3456_78"
      var arrayOfStrings = stringToTest.split(',')
      var foundData = false;
      for (var i = 0; i<arrayOfStrings.length; i++){
        var returnArray = arrayOfStrings[i].match(/^\s*([A-Z])_([0-9_]*)\s*$/);
        if (returnArray[1] == 'C'){
          foundData = returnArray[2];
          break;
        }
      }
      console.log(foundData !== false ? foundData : 'Sorry, no matching index found!')
      

      然后您可以将其放入一个函数中,并将所需的类别作为参数。扩展功能

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-03
        • 2020-11-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多