Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/423.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如果分隔符两边都有字符,则按分隔符拆分字符串_Javascript_Regex_String_Split - Fatal编程技术网

Javascript 如果分隔符两边都有字符,则按分隔符拆分字符串

Javascript 如果分隔符两边都有字符,则按分隔符拆分字符串,javascript,regex,string,split,Javascript,Regex,String,Split,在JavaScript中,如果分隔符两边都有一个字符(非数字),如何才能按分隔符拆分字符串?这可以通过正则表达式实现吗 var str = 'this-is-hyphenated - this isn't'; 应生成一个数组:此|为|连字号-此为非连字号 仅当分隔符的两侧都有字符(非数字)时,如何按分隔符拆分字符串 鉴于“非数字”标准,您不能使用\b(词尾)标志,因为它将匹配单词中的数字(例如,foo2被视为一个单词,而不是后跟“2”的单词) 使用“替换为极不可能出现的字符串”(例如&&&&&

在JavaScript中,如果分隔符两边都有一个字符(非数字),如何才能按分隔符拆分字符串?这可以通过正则表达式实现吗

var str = 'this-is-hyphenated - this isn't';
应生成一个数组:此|为|连字号-此为非连字号

仅当分隔符的两侧都有字符(非数字)时,如何按分隔符拆分字符串

鉴于“非数字”标准,您不能使用
\b
(词尾)标志,因为它将匹配单词中的数字(例如,foo2被视为一个单词,而不是后跟“2”的单词)

使用“替换为极不可能出现的字符串”(例如
&&&&&&
)和捕获组,可以分两步完成此操作:

s.replace(/([a-z])-([a-z])/ig,'$1&&&&$2').split('&&&&')

但是,这可能不是您想要的。

这是一个不太正则的版本

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

为什么在
连字符后会有分隔符
?您是否可以接受`-this is not`以及在下一个有效分隔符之前的所有内容都是一个项目?这是一个示例。我只想在两边各有一个字符的连字符上拆分字符串。类似于
\b-\b |(?=-)
的操作可以完成。唯一的问题是像
这样的输入,这是一个-u测试
。请参阅@HamZa,它不符合“非数值”标准。