如何在javascript中拆分包含多个规则的字符串

时间:2012-02-19 18:29:02

标签: javascript string split

我有这个字符串,例如:

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

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

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

表示适用2条规则:

  1. 在每个空格后拆分“”(我知道如何)
  2. 如果有特殊字符(“。”或“#”),那么也会拆分但添加字符“&”在带有特殊字符的单词之前。
  3. 我知道第一条规则我可以​​strArr = str.split(“”)。但我该如何做其他伎俩呢?

    感谢, 阿隆

5 个答案:

答案 0 :(得分:6)

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

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

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

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

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

答案 1 :(得分:1)

您必须使用正则表达式,以便一次匹配所有特殊字符。通过“特殊”,我认为你的意思是“没有字母”。

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

答案 2 :(得分:0)

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

确定。我看到了,你发现了,我想:

1)首先使用拆分到空格
2)遍历你的数组,当你找到#或时,再次在数组成员中拆分。
3)当您找到

时,再次遍历您的数组str.replace("#", "&#")str.replace(".","&.")

答案 3 :(得分:0)

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

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

strArr = str.replace('\W',' &');

strArr = strArr.split(' '); 

这应该接近你所要求的。

答案 4 :(得分:0)

这有效:

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

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