Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用带有or语句的正则表达式拆分字符串_Javascript_Regex_Split - Fatal编程技术网

Javascript 使用带有or语句的正则表达式拆分字符串

Javascript 使用带有or语句的正则表达式拆分字符串,javascript,regex,split,Javascript,Regex,Split,我正在尝试使用正则表达式拆分字符串,理想情况下,正则表达式会拆分每个空格字符、下划线和大写字母上的字符串 目前我拥有的是: /(\s+|+|[A-Z]+)/ 但我只能让它在这些条件中的任何一个而不是所有条件下拆分字符串。有什么建议吗?提前谢谢 编辑:上面当前(现已修订)的正则表达式将拆分大写、空格和下划线上的字符串…但是它是这样拆分的: “hello World再见”=[“hello”、“W”、“World”、“G”、“oodbye”] 我想在大写字母上拆分字符串,但不在大写字母之后拆分,如

我正在尝试使用正则表达式拆分字符串,理想情况下,正则表达式会拆分每个空格字符、下划线和大写字母上的字符串

目前我拥有的是:

/(\s+|+|[A-Z]+)/

但我只能让它在这些条件中的任何一个而不是所有条件下拆分字符串。有什么建议吗?提前谢谢

编辑:上面当前(现已修订)的正则表达式将拆分大写、空格和下划线上的字符串…但是它是这样拆分的:


“hello World再见”=[“hello”、“W”、“World”、“G”、“oodbye”]

我想在大写字母上拆分字符串,但不在大写字母之后拆分,如下所示:

[“你好”、“世界”、“再见”]
来自您的评论:

我的目的是能够解析任何带有下划线、空格或大写字母的字符串,并在这些“单词”之间放置连字符。然而,字符串有时可能以
helloworldbye
的形式出现,它们以驼峰式的形式聚集在一起,很难分开

若要在空格或下划线上拆分,请使用字符类
[\s\u]+
。要在大写字母之前进行额外拆分,请使用“向前看”

总之,这看起来像:

/[\s]+|(?=[A-Z])/
您可以这样使用它:

var str=“HelloWorld再见”;
str=str.split(/[\s_33;]+|(?=[A-Z])/).join(“-”);
document.body.innerHTML=str来自您的评论:

我的目的是能够解析任何带有下划线、空格或大写字母的字符串,并在这些“单词”之间放置连字符。然而,字符串有时可能以
helloworldbye
的形式出现,它们以驼峰式的形式聚集在一起,很难分开

若要在空格或下划线上拆分,请使用字符类
[\s\u]+
。要在大写字母之前进行额外拆分,请使用“向前看”

总之,这看起来像:

/[\s]+|(?=[A-Z])/
您可以这样使用它:

var str=“HelloWorld再见”;
str=str.split(/[\s_33;]+|(?=[A-Z])/).join(“-”);
document.body.innerHTML=str
它匹配空格、下划线和大写字母之前的字符

它匹配空格、下划线和大写字母之前的字符

这使用了积极的前瞻断言

但是“鲍勃”呢?大概他不应该被拆分,所以大写字母后面应该跟一个小写字符:

var x = "Hello World Good_bye CruelWorld BOB";
var y = x.split(/\s+|_|(?=[A-Z][a-z])/);
console.log(y);
// ["Hello", "World", "Good", "bye", "Cruel", "World", "BOB"]
这并没有涵盖所有可能的变化,但符合所描述的问题


进一步尝试涵盖不同的可能性:

var x = "Hello World WhatABeautifulDay Good_bye CruelWorld BOB TaDa";
var y = x.split(/\s+|_|(?=[A-Z][a-z])/);
var z = y.map(function (obj) {
    return obj.replace(/([a-z])(?=[A-Z]$)/, '\$1-');
}).join('-');
console.log(z);
// Hello-World-What-A-Beautiful-Day-Good-bye-Cruel-World-BOB-Ta-Da
这使用了积极的前瞻断言

但是“鲍勃”呢?大概他不应该被拆分,所以大写字母后面应该跟一个小写字符:

var x = "Hello World Good_bye CruelWorld BOB";
var y = x.split(/\s+|_|(?=[A-Z][a-z])/);
console.log(y);
// ["Hello", "World", "Good", "bye", "Cruel", "World", "BOB"]
这并没有涵盖所有可能的变化,但符合所描述的问题


进一步尝试涵盖不同的可能性:

var x = "Hello World WhatABeautifulDay Good_bye CruelWorld BOB TaDa";
var y = x.split(/\s+|_|(?=[A-Z][a-z])/);
var z = y.map(function (obj) {
    return obj.replace(/([a-z])(?=[A-Z]$)/, '\$1-');
}).join('-');
console.log(z);
// Hello-World-What-A-Beautiful-Day-Good-bye-Cruel-World-BOB-Ta-Da
拆分条件

删除:在空白处,下划线
保持:大写字母在前面

正则表达式
[\s|]+|(?=[A-Z])

拆分条件

删除:在空白处,下划线
保持:大写字母在前面



Regex
[\s\u]+|(?=[A-Z])
A-Z+
看起来不对,这不应该是
[A-Z]+
你是对的,这似乎解决了我的部分问题。我将更新我的问题。显示输入字符串和预期结果。看起来您实际上不想按大写字母拆分。嗨,各位,很抱歉造成混淆。我的目的是能够解析任何带有下划线、空格或大写字母的字符串,并在这些“单词”之间放置连字符。然而,字符串有时可能以
helloworldbye
的形式出现,它们以驼峰形式聚集在一起,更难分离。
A-Z+
看起来是错误的,这不应该是
[A-Z]+
你是对的,这似乎解决了我的部分问题。我将更新我的问题。显示输入字符串和预期结果。看起来您实际上不想按大写字母拆分。嗨,各位,很抱歉造成混淆。我的目的是能够解析任何带有下划线、空格或大写字母的字符串,并在这些“单词”之间放置连字符。但是,字符串有时可能以
helloworldbye
的形式出现,它们以驼峰形式聚集在一起,很难分开。在这种情况下,没有关于空格分割的规定
hello world
在这种情况下,没有关于空格分割的规定
hello world
但是如果单词只有一个字符长呢?例如
什么是Beautifulday
?我想你可以不用回头看就完成它,但你必须使用
.split()
以外的东西。我真的很想知道怎么做。我也会努力的。好吧,我试过了。但后来我注意到,只有当鲍勃是最后一个人的时候,它才会起作用。否则,将无法检测以下单词。我认为鲍勃和卡梅尔凯斯是不相容的。@4卡斯特我不确定你说的鲍勃是最后一个人是什么意思?我已经把我的尝试添加到我的答案中以供参考。那太棒了!我的意思是,如果BOB后面紧跟着另一个单词(后面没有空格或下划线),那么它就不起作用了。这对我来说已经足够好了。好极了!但是如果单词只有一个字符长呢?例如
什么是Beautifulday
?我想你可以不用回头看就完成它,但你必须使用
.split()
以外的东西。我真的很想知道怎么做。我也会努力的。好吧,我试过了。但后来我注意到,只有当鲍勃是最后一个人的时候,它才会起作用。否则,将无法检测以下单词。我认为鲍勃和卡梅尔凯斯是不相容的。@4卡斯特我不确定你说的鲍勃是最后一个人是什么意思?我已将我的尝试添加到我的answe中