用小写字母和连字符替换整个字符串中的大写字母

时间:2019-05-29 21:51:15

标签: javascript regex string replace

我正在尝试将整个字符串中的大写字母替换为其小写的计数器部分,同时在其后添加连字符(除非最后一个字母)。这样Sunny&Cloudy就会来sunny-&-cloudy

var name = 'Sunny&Cloudy';
name.replace(/([A-Z])(.*)/, '\L$1');

我自己尝试过此操作,但是只有到达第一个大写字母时才添加连字符并停止。离开我-S

4 个答案:

答案 0 :(得分:1)

如果要将pipeline = [ { "$project": { "arrayofkeyvalue": { "$objectToArray": "$9.aam6" } } }, { "$project": { "keys": "$arrayofkeyvalue.k" } } ] print(list(c.aggregate(pipeline))) # [{u'_id': 0, u'keys': [u'aam5', u'aam4', u'aam6', u'aam1', u'aam3', u'aam2']}] 转换为Sunny&Cloudy,则下面的代码应该起作用:

sunny-&-cloudy

基本上,您只使用var name = 'Sunny&Cloudy'; name.replace(/[A-Z][a-z]*/g, str => '-' + str.toLowerCase() + '-') // Convert words to lower case and add hyphens around it (for stuff like "&") .replace('--', '-') // remove double hyphens .replace(/(^-)|(-$)/g, ''); // remove hyphens at the beginning and the end 作为function的第二个参数。 (Reference

它不仅可以用小写字母代替大写字母,因此您可能需要修改问题描述。

答案 1 :(得分:0)

满足您需要的一种可能方法是使用replacement function中的String.replace()

var name = 'Sunny&Cloudy';

let res = name.replace(/[A-Z&]/g, m => m === "&" ? "-and-" : m.toLowerCase());

console.log(res);
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}

答案 2 :(得分:0)

您可以使用单词边界\b将字符串拆分为标记,将所有内容映射为小写字母(最后一个字母除外),然后将结果与-连起来

function dashed(str, sep) {
  let words = str.split(sep);
  return words.map(word => {
    let left = word.slice(0, -1).toLowerCase();
    let lastLetter = word.slice(-1);
    return `${left}${lastLetter}`
  }).join('-')

}

console.log(
  dashed("Sunny&CloudY&Rainy", /\b/)
)

答案 3 :(得分:0)

以下正则表达式可以解决问题:

const regex = /(.+?\b)+?/g;
const str = 'Sunny&Cloudy&rainy';
const subst = '$1-';
const result = str.replace(regex, subst);

//make string lowercase + remove last '-'
console.log('Substitution result: ', result.toLowerCase().substring(0, result.length - 1));

通过regex101.com可以派上用场来完善正则表达式。您可以选择“ ECMAScript / JavaScript”正则表达式选项。每当需要创建正则表达式时,我都会使用该网站。