我有这个字符串,例如:
str = "my name is john#doe oh.yeh";
我正在寻找的最终结果就是这个数组:
strArr = ['my','name','is','john','&#doe','oh','&yeh'];
表示适用2条规则:
我知道第一条规则我可以strArr = str.split(“”)。但我该如何做其他伎俩呢?
感谢, 阿隆
答案 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)