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