<div id='x'>ThiIssss_SSSSMySites</div>
$('#x').text( $('#x').text().replace(/(?<=[a-zA-Z])(?=[A-Z])/, '_'))
预期输出为:
Thi_Issss_S_S_S_S_My_Sites
基本上第一个字母即使是大写字母也不应该在下划线前加上下划线。如果找不到大写字母,请在所有地方都休息一下,如果不加下划线然后再加上大写字母,我尝试了很多方法。我们可以用正则表达式实现吗?还是我们需要功能来做到这一点?
答案 0 :(得分:1)
您可以使用
s.replace(/([^_])(?=[A-Z\d])/g, "$1_")
请参阅JS演示
var ss = ["ThiIssss_SSSSMySites", "ThisIsM_M_ySites"];
for (var s of ss) {
console.log(s, "=>", s.replace(/([^_])(?=[A-Z\d])/g, "$1_"));
}
模式将匹配:
([^_])
-第1组:除_
以外的任何字符(?=[A-Z\d])
-后面跟一个大写字母或数字。替换为$1_
,是对第1组中存储的值的反向引用和一个_
字符。
请参见regex demo。