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