如何在JavaScript中使用正则表达式缩写下划线或连字符分隔词?

时间:2018-04-30 11:12:41

标签: javascript regex

我需要用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标签太长并且与其他元素重叠。我有两个选择来解决这个问题。

  1. bl.ocks.org
  2. 中包装这样的标签
  3. 缩写它们。将鼠标悬停在条形图或其标签上时,显示完整的名称。
  4. 我选择了第二次。因为第一个仍占据很多地方。

3 个答案:

答案 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'));




Here at regex101