如果字符存在于分隔符的任一侧,则按分隔符拆分字符串

时间:2014-03-21 00:59:08

标签: javascript regex string split

在JavaScript中,如果分隔符在其两侧都有一个字符(非数字),我怎么能用分隔符分割字符串?这可以通过RegEx来完成吗?

var str = 'this-is-hyphenated - this isn't';

应该产生一个数组:this |是|连字符 - 这不是

2 个答案:

答案 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' ]