【问题标题】:How to Split string with multiple rules in javascript如何在javascript中使用多个规则拆分字符串
【发布时间】:2012-02-19 18:29:02
【问题描述】:

我有这个字符串例如:

str = "my name is john#doe oh.yeh";

我正在寻找的最终结果是这个数组:

strArr = ['my','name','is','john','&#doe','oh','&yeh'];

这意味着适用 2 条规则:

  1. 在每个空格“”之后分割(我知道怎么做)
  2. 如果有特殊字符(“.”或“#”),则也拆分,但在具有特殊字符的单词前添加字符“&”。

我知道我可以将 strArr = str.split(" ") 作为第一条规则。但是我该怎么做另一个技巧呢?

谢谢, 阿隆

【问题讨论】:

  • 应该是'&#doe'还是'&doe'?你有'&yeh' 而不是'&.yeh'
  • 您是否希望将这些“特殊字符”作为输入的一部分,或者它们中的任何一个都不会出现一次?
  • @outis 你错过了第二部分吗?
  • @RobW:不,但这确实是两个问题,第一个问题已经被问过了。目前正在寻找另一个第二个。

标签: javascript string split


【解决方案1】:

假设结果应该是'&doe' 而不是'&#doe',一个简单的解决方案是将所有.# 替换为&,并用空格分隔:

strArr = str.replace(/[.#]/g, ' &').split(/\s+/)

/\s+/ 匹配连续的空格而不是一个。

如果结果应该是 '&#doe''&.yeah' 使用相同的正则表达式并添加捕获:

strArr = str.replace(/([.#])/g, ' &$1').split(/\s+/)

【讨论】:

    【解决方案2】:

    您必须使用正则表达式来一次匹配所有特殊字符。 “特殊”是指“没有字母”。

    var pattern = /([^ a-z]?)[a-z]+/gi;             // Pattern
    var str = "my name is john#doe oh.yeh";         // Input string
    var strArr = [], match;                         // output array,  temporary var
    while ((match = pattern.exec(str)) !== null) {  // <-- For each match
       strArr.push( (match[1]?'&':'') + match[0]);  // <-- Add to array
    }
    // strArr is now:
    // strArr = ['my', 'name', 'is', 'john', '&#doe', 'oh', '&.yeh']
    

    不匹配连续的特殊字符。必须为此修改模式。例如,如果要包含所有连续字符,请使用([^ a-z]+?)

    此外,它不包含最后一个特殊字符。如果您也想包含这个,请使用[a-z]* 并删除!== null

    【讨论】:

      【解决方案3】:

      使用 split() 方法。这就是你需要的: http://www.w3schools.com/jsref/jsref_split.asp

      好的。我看到了,你找到了,我想:

      1) 首先使用拆分到空格
      2)遍历您的数组,当您找到 # 或时再次拆分数组成员。
      3) 再次遍历您的数组,找到时str.replace("#", "&amp;#")str.replace(".","&amp;.")

      【讨论】:

        【解决方案4】:

        我认为 split() 和 replace() 的组合是您正在寻找的:

        str = "my name is john#doe oh.yeh";
        
        strArr = str.replace('\W',' &');
        
        strArr = strArr.split(' '); 
        

        这应该接近你的要求。

        【讨论】:

          【解决方案5】:

          这行得通:

          array = string.replace(/#|\./g, ' &$&').split(' ');
          

          在这里查看演示:http://jsfiddle.net/M6fQ7/1/

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2020-09-09
            • 1970-01-01
            • 2015-02-09
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-10-13
            • 2012-06-18
            相关资源
            最近更新 更多