在JavaScript中,如果分隔符在其两侧都有一个字符(非数字),我怎么能用分隔符分割字符串?这可以通过RegEx来完成吗?
var str = 'this-is-hyphenated - this isn't';
应该产生一个数组:this |是|连字符 - 这不是
答案 0 :(得分:2)
如果分隔符在其两边都有一个字符(非数字),我怎么能用分隔符分割字符串呢?
鉴于“非数字”标准,您不能使用\b
(单词结束)标记,因为它将匹配单词中的数字(例如,foo2被视为一个单词,而不是单词后跟' 2' )。
你可以分两步使用替换一个极不可能发生的字符串(比如&&&&
)和捕获组:
s.replace(/([a-z])-([a-z])/ig,'$1&&&&$2').split('&&&&')
然而,这可能不是你想要的。
答案 1 :(得分:0)
这是一个较少的RegEx版本
var str = 'this-is-hyphenated - this isn\'t',
chrRegEx = /[a-z]/i;
var result = str.split("-").reduce(function(result, current) {
var previous = result[result.length - 1];
if (!previous) {
return result.concat(current);
}
if (chrRegEx.test(previous[previous.length-1]) && chrRegEx.test(current[0])){
result = result.concat(current);
} else {
result[result.length - 1] += "-" + current;
}
return result;
}, []);
console.log(result);
# [ 'this', 'is', 'hyphenated - this isn\'t' ]