我需要用abbreviation
连字符或下划线分隔单词,例如:
hyphen-separated-words
underscore_separated_words
我使用下面的代码hyphen-separated-words
,它运行正常。
var hyphenSeparatedWords = "hyphen-separated-words";
var abbr = hyphenSeparatedWords.match(/\b([a-z])/g).join('');
console.log(abbr) // hsw
对于underscore_separated_words
,我使用下面的代码。它工作正常,但有很多重复。
var underscoreSeparatedWords = "underscore_separated_words";
var abbr = underscoreSeparatedWords.replace(/_/g, '-').match(/\b([a-z])/g).join('');
console.log(abbr) // usw
如何在不使用underscore_separated_words
的情况下,以与hyphen-separated-words
相同的方式缩写replace
?
我如何结合这两个步骤?
我有一个内部使用的d3条形图。我的字体很大。并且一些xAxis标签太长并且与其他元素重叠。我有两个选择来解决这个问题。
我选择了第二次。因为第一个仍占据很多地方。
答案 0 :(得分:2)
为什么不尝试使用split
中的正则表达式,该正则表达式会在获得第一个后用-
或_
和join
分开字符。
function abbr(words){
return words.split(/-|_/).map(item=>item.charAt(0)).join('');
}
var words = 'hyphen-separated-words';
var res = abbr(words);
console.log(res);
words = 'underscore_separated_words';
res = abbr(words);
console.log(res);

答案 1 :(得分:1)
我不知道为什么不想使用替换但你可以使用替换一个衬垫,并使用替换器功能:
"underscore_separated_words".replace(/[A-Z]+?(?:[_-]|\b)/gi,function(m,o,s){return m.slice(0,1)}); //usw
我认为以上是更简洁和优雅的方式
答案 2 :(得分:0)
如果您想处理整个句子,可以使用替代解决方案:
var str = 'Leave normal words and only abreviate underscore_separated_words.';
console.log(str.replace(/(?:_|(?=[a-z]*_))([a-z])[a-z]*/gi, '$1'));