gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 05:10:25 25 4
gpt4 key购买 nike

例如,如果我有一个像“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 提供解决方案的第一部分!刚刚发现大写字母后是否有大写单词,它也会吞下那个空间。我们如何保留那里的空间?

所以“Hello I B M Dude”变成了“Hello IBMDude”而不是“Hello IBM Dude”

最佳答案

当正则表达式第一次匹配时(在 "A B" 上),这部分字符串被引擎消耗,所以它不会再次匹配,即使你的正则表达式有全局 ( '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"

注意:如@CasimirHyppolite注意,后面的字母必须是可选的,否则如果字符串的最后一个字符是大写,第二个正则表达式将不起作用。因此,模式 ([^A-Za-z]|$) 可以读作“不是字母,也不是字符串的结尾”。

编辑:简化从 (?=[A-Z]([^A-Za-z]|$))(?=[A-Z ]\b) 根据 @hwnd 的建议

关于javascript - 什么是删除大写字母之间的空格但保留单词之间的空格的正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19801351/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com