使用正则表达式在JavaScript中生成字符串中的缩写?

时间:2009-10-02 07:29:40

标签: javascript regex

我想从字符串'Content Management Systems'生成一个类似'CMS'的缩写字符串,最好使用正则表达式。

这可能是使用JavaScript正则表达式还是我必须进行split-iterate-collect?

4 个答案:

答案 0 :(得分:13)

捕获字边界后的所有大写字母(以防输入全部大写):

var abbrev = 'INTERNATIONAL Monetary Fund'.match(/\b([A-Z])/g).join('');

alert(abbrev);

答案 1 :(得分:6)

var input = "Content Management System";
var abbr = input.match(/[A-Z]/g).join('');

答案 2 :(得分:3)

根据 Convert string to proper case with javascript (也提供一些测试用例)调整我的答案:

var toMatch = "hyper text markup language";
var result = toMatch.replace(/(\w)\w*\W*/g, function (_, i) {
    return i.toUpperCase();
  }
)
alert(result);

答案 3 :(得分:1)

请注意,以上示例仅适用于英文字母字符。这是更通用的示例

const example1 = 'Some Fancy Name'; // SFN
const example2 = 'lower case letters example'; // LCLE
const example3 = 'Example :with ,,\'$ symbols'; // EWS
const example4 = 'With numbers 2020'; // WN2020 - don't know if it's usefull
const example5 = 'Просто Забавное Название'; // ПЗН
const example6 = { invalid: 'example' }; // ''

const examples = [example1, example2, example3, example4, example5, example6];
examples.forEach(logAbbreviation);

function logAbbreviation(text, i){
  console.log(i + 1, ' : ', getAbbreviation(text));
}

function getAbbreviation(text) {
  if (typeof text != 'string' || !text) {
    return '';
  }
  const acronym = text
    .match(/[\p{Alpha}\p{Nd}]+/gu)
    .reduce((previous, next) => previous + ((+next === 0 || parseInt(next)) ? parseInt(next): next[0] || ''), '')
    .toUpperCase()
  return acronym;
}