Javascript 什么是用于删除大写字母之间空格但保留单词之间空格的正则表达式?

Javascript 什么是用于删除大写字母之间空格但保留单词之间空格的正则表达式?,javascript,regex,string,replace,Javascript,Regex,String,Replace,例如,如果我有一个像“Hello I B M”这样的字符串,我如何检测大写字母之间的空格,而不是“o”和“I”之间的空格 基本上,“Hello I B M”应该解析为“Hello IBM” 到目前为止,我有: value = "Hello I B M" value = value.replace(/([A-Z])\s([A-Z])/g, '$1$2') 但它只替换了两个大写字母之间的第一个空格,如:“Hello IB M” --编辑-- 解决方案第1部分: value = value.rep

例如,如果我有一个像“Hello I B M”这样的字符串,我如何检测大写字母之间的空格,而不是“o”和“I”之间的空格

基本上,“Hello I B M”应该解析为“Hello IBM”

到目前为止,我有:

value = "Hello I B M"
value = value.replace(/([A-Z])\s([A-Z])/g, '$1$2')
但它只替换了两个大写字母之间的第一个空格,如:“Hello IB M”

--编辑--

解决方案第1部分:

 value = value.replace(/([A-Z])\s(?=[A-Z])/g, '$1')
感谢Renato提供了解决方案的第一部分!刚刚发现如果大写字母后面有大写的单词,它也会吞掉空格。我们如何保护那里的空间


因此,当正则表达式第一次匹配(在
“ab”
)时,“Hello I B M Dude”变为“Hello IBMDude”,而不是“Hello IBM Dude”

),这部分字符串将被引擎使用,因此它不会再次匹配,即使正则表达式具有全局(
'g'
)标志

您可以通过使用正向前瞻(
(?=PATTERN)
)来实现预期的结果,这不会消耗匹配:

value = "Hello I B M"
value = value.replace(/([A-Z])\s(?=[A-Z])/g, '$1')
console.log(value) // Prints "Hello IBM"

如果下一个大写字母是单词中的第一个字母,要使其不删除空格,可以使用单词边界
\b
来增加先行模式,以进行该限制:

value = "Hello I B M Dude"
value = value.replace(/([A-Z])\s(?=[A-Z]\b)/g, '$1')
console.log(value) // Prints "Hello IBM Dude"
注意:如前所述,必须将以下字母设置为可选,否则,如果字符串的最后一个字符为大写,则第二个正则表达式将不起作用。因此,模式
([^A-Za-z]|$)
,可以理解为“不是字母,也不是字符串的结尾”


编辑:按照

的建议,将前瞻性从
(?=[A-Z]([^A-Za-Z]|$)
简化为
(?=[A-Z]\b)
,如果字符串是
,那么“Hello I b Groink”
就像一个符咒一样工作。。。除了一件事!我刚刚意识到,在测试我生成的标题时。像“Hello I B M Dude”这样的字符串变成了“Hello I B M Dude”我如何防止“M”和“Dude”之间的空格被吞没?@StevenYuan-现在你正在更改要求。您要求删除两个大写字母之间的任何空格。如果你不想这样,新规则是什么?你可以使用
([A-Z])\s(?=[A-Z]\b)
@Renato Zannon有时最小的事情可以忽略=)有没有办法去掉两个大写单词和/或字母之间的空格,这样FaceBook就变成了FaceBook?