繁体   English   中英

javascript找到第n个事件,并在其前添加下划线

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM