我正在尝试将整个字符串中的大写字母替换为其小写的计数器部分,同时在其后添加连字符(除非最后一个字母)。这样Sunny&Cloudy
就会来sunny-&-cloudy
var name = 'Sunny&Cloudy';
name.replace(/([A-Z])(.*)/, '\L$1');
我自己尝试过此操作,但是只有到达第一个大写字母时才添加连字符并停止。离开我-S
答案 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”正则表达式选项。每当需要创建正则表达式时,我都会使用该网站。