如何使用正则表达式在驼峰命名法字符串中插入空格

5
我正在使用下面的正则表达式将空格插入到驼峰字符串中。
var regex = /([A-Z])([A-Z])([a-z])|([a-z])([A-Z])/g;

示例用法
var str = "CSVFilesAreCoolButTXTRules";
str = str.replace( regex, '$1$4 $2$3$5' );
// "CSV Files Are Cool But TXT Rules"

这个代码运行良好,但我还想在字符串中的任何数字前后放置空格,尽管我不想在单个数字之间插入空格,如果一个数字前面带有$,那么空格应该在它之前而不是数字之前。
同时,我还想删除数字以外的任何字符,包括字母、$符号和小数点.
例如,

MRRPLowPriceUSD$10.10HighPriceUSD$1998.59595CommentsNoChangeReportedNTPL1001KSE-100INDEX

应变为

MRRP最低价美元$10.10,最高价美元$1998.59595,无评论报告,NTPL 1001 KSE 100指数无变化。

请注意,连字符-已被删除。

感谢您的任何帮助。

相关链接:如何使用正则表达式在驼峰命名字符串中添加空格

1个回答

10

尝试使用正向先行断言的正则表达式和替换:

var regex = /([^A-Za-z0-9\.\$])|([A-Z])(?=[A-Z][a-z])|([^\-\$\.0-9])(?=\$?[0-9]+(?:\.[0-9]+)?)|([0-9])(?=[^\.0-9])|([a-z])(?=[A-Z])/g;
var str = "CSVFilesAreCool123B--utTXTFoo12T&XTRules$123.99BAz";
str = str.replace(regex, '$2$3$4$5 ');
// CSV Files Are Cool 123 B ut TXT Foo 12 T XT Rules $123.99 B Az

(RegExr)


嗯..很接近了,但是一个连字符 "-" 仍然没有被去掉。该如何解决?这是运行的代码http://jsfiddle.net/kreativemart/zEpjR/ - KMX
@KMX 是否需要删除任何连字符?它们出现在哪里?仅出现在某些子字符串的开头/结尾吗? - speakr
查看以下示例,应用正则表达式以去除连字符“-”,例如“1001KSE-100INDEX”。 - KMX
@KMX 我已经相应地更改了我的答案。 - speakr
(鼓掌)是的...我已经标记为已回答并点赞了。做得很好。不过我还有另一个需求。嗯,我使用这个正则表达式来拆分驼峰式命名法,并且我在我的数据表列中使用它来生成动态表单并将列名用作标签。这个正则表达式会帮助我很多。现在另一个需求是当我生成SEF URL时,除了字母/数字以外的任何内容都应该被替换为一个连字符,所有重复的连字符也应该变成一个。如何实现? - KMX
2
@KMX 如果您有其他(即使是相关的)问题/任务,请为此创建一个单独的问题。 - speakr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接