[英]javascript find the nth occurence and add an underscore before it
给这个:
ForeclosureDefenseDate
ForeclosureDefense
我要这样:
foreclosure_defense_date
foreclosure_defense
这是我到目前为止写的:
"ForeclosureDefense".replace(/(?:[A-Z])(?:[a-z]+)[A-Z]/g, "_");
它返回以下输出:
_efense
基本上我在上面尝试做的是匹配一个大写字母,忽略它,然后匹配小写字母,也忽略它们,然后找到一个大写字母,这就是我采取行动替换小写字母的时候。
我遇到的问题是,它替换了第n个大写字母,而不是在其前添加下划线,并且第二个非捕获字符应忽略小写字母,但不是。
有什么建议么?
.replace()
将替换整个匹配项,非捕获组与此无关。 似乎匹配的是小写字母,您想看看大写字母后面是否有小写字母。 您可以通过正向前行 ( (?=...)
)进行此操作。
正如@elclanrs所说, .replace()
接受回调作为替换:
str.replace(/[A-Z]+(?=[a-z])/g, function(match, index) {
return (index > 0 ? '_' : '') + match.toLowerCase();
});
或者不带回调:
str.replace(/[A-Z]+(?=[a-z])/g, '_$&').replace(/^_/, '').toLowerCase();
如果您有带缩写词的名称,并且想要将它们分开,以便例如SomeURITestCase
成为some_uri_test_case
,则可以使用
/[A-Z]+(?=[A-Z])|[A-Z](?=[a-z])/g
作为表达。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.