我已经查看了此链接和此链接以及其他几个链接,但它们似乎都无法仅使用纯正则表达式解决此问题(...不使用替换等)。
输入字符串:“车辆服务自动气体分配器”
我想要的输出是:< code>[“车辆服务”、“自动加油机”]
这是我的尝试:
var str = 'Vehicle ServicesAUTOMATED GAS DISPENSER'
console.log(str.split(/(?=[a-z][A-Z])/))
['车辆服务','自动加油机']
我有一个下面的解决方案,但我不喜欢它,因为它使用了一个额外的“替换”方法。我正在寻找一个纯正则表达式的拆分。
var str = 'Vehicle ServicesAUTOMATED GAS DISPENSER'
console.log(str.replace(/([a-z])(?=[A-Z])/, "$1_").split('_'))
['车辆服务','自动加气机']
更新:我的要求只是简单地按照帖子中的说明分割输入字符串——如图所示,一旦大小写转换为大写,它将一直保持大写直到结束。
JavaScript 不支持回溯,因此,如果您尝试拆分两个字符之间的空白区域,则无法在空格是特定字符之前验证字符。但是捕获括号也可以将元素附加到拆分
的结果数组中。因此,您可以创建如下解决方案:
var str = 'Vehicle ServicesAUTOMATED GAS DISPENSER'
var ar = str.split(/(.*[a-z])(?=[A-Z])/);
//result is ["", "Vehicle Services", "AUTOMATED GAS DISPENSER"]
ar.shift();//get rid of the leading empty element
console.log(ar);//["Vehicle Services", "AUTOMATED GAS DISPENSER"]
另一种方法是将空匹配放在结果数组的末尾而不是开头,因为 split 有一个内置参数来限制结果数组的元素数量,因此我们将使用 AUTOMATIC GAS DISPENSER
作为分隔符,您将将其放在捕获括号之间,然后我们将空元素放在结果数组的末尾,我们可以简单地剥离它而不调用 pop
:
var str = 'Vehicle ServicesAUTOMATED GAS DISPENSER'
var ar = str.split(/((?:[A-Z]{2,}\s*)+)/,2);
console.log(ar);//["Vehicle Services", "AUTOMATED GAS DISPENSER"]
但是,如果你能想出一个逻辑,它可以单独使用前瞻来识别要拆分的空白空间,而不必向后看,那么你就可以这样写:
var str = 'Vehicle ServicesAUTOMATED GAS DISPENSER'
var ar = str.split(/(?=AUTO)/);
console.log(ar);//["Vehicle Services", "AUTOMATED GAS DISPENSER"]
如果您的用例是一个混合大小写字符串,后跟一个全大写字符串,那么一个想法是使用< code>match而不是< code>split,然后从捕获的组中读取结果:
var str = 'Vehicle ServicesAUTOMATED GAS DISPENSER';
var result = str.match(/(.*[a-z])((?=[A-Z]).*)/);
console.log([result[1], result[2]]);
这并不完美,但对于两者之间没有任何标识符的单个拆分来说,这是我能想到的最好的方法。
var str = 'Vehicle ServicesAUTOMATED GAS DISPENSER';
var res = str.split(/([A-Z\s]+$)/);
console.log(res);
唯一的问题是它留下了一个带有空字符串的额外数组元素。如果总是只需要两个数组元素,则可以将其弹出或忽略。
https://jsfiddle.net/2ex4cuno/4/小提琴
如@rid所述,您可以将其添加到拆分中,以便只获得两个结果(再次,假设您总是只期望 2,我假设您会)。
var str = 'Vehicle ServicesAUTOMATED GAS DISPENSER';
var res = str.split(/([A-Z\s]+$)/, 2);
console.log(res);
问题内容: 所以我有一个像 2000cc车辆翻新发动机 我想把它变成 2000CC车辆翻新发动机 资本CC于2000CC。我显然不能这样做,因为它将所有出现的cc都替换为大写版本,因此加速器一词将成为加速器。在我的情况下,前四位将始终是四位,后跟字母cc,因此我认为可以使用正则表达式来完成。 我的问题是,在Java中,当cc跟随4位数字时如何将cc转换为CC并获得我期望的结果? 问题答案: 如果只
问题内容: 我想使用JavaScript从我的URL中提取查询字符串,并且想要对查询字符串名称进行不区分大小写的比较。这是我在做什么: 但是上面的代码进行区分大小写的搜索。我尝试过,但没有帮助。知道如何实现吗? 问题答案: 您可以添加“ i”修饰词,表示“忽略大小写”
问题内容: 我想在Go中使用regexp交换案例。我试图在Javascript中使用类似的方法,但是我不知道如何使Go理解$符号。 这是我的尝试。它适用于将所有高位转换为低位,反之亦然,但是我想做的是同时交换每个字母。例如,“ Hello” —>“ hELLO” 以下是我用Javascript编写的完美代码。 问题答案: 您不能(我认为)使用正则表达式执行此操作,但是使用可以很简单。
问题内容: 我正在尝试使用以下程序使用正则表达式删除字符串中的某些单词。它可以正确删除,但只考虑大小写。如何使其不区分大小写。我坚持使用方法,但是没有用。 输出: 问题答案: 您需要将模式中要区分大小写的部分放在 前面 : 看见 我已将要删除的关键字周围的空格替换为单词边界()。之所以出现问题,是因为可能有两个关键字一个接一个地被一个空格隔开。 如果仅当关键字被 空格 包围时才想删除它们,则可以使
正则获取指定字符到下一个大写字符之间的内容
我需要查找以三个小写字母开头的文件,但由于某种原因,我遇到了不希望的不区分大小写的行为。我正在使用带有 -regex 选项的查找,但它甚至可以找到以大写字母开头的文件。 打印内容与以下内容相同: 如果我不使用一系列字符,而是使用一个字符,则工作方式与敏感字符相同,只打印小写文件。 我尝试过使用不同的正则表达式类型,结果是相同的。 此外,白鹭似乎也起作用: 为什么在使用字符范围时“find-rege