Javascript 正则表达式:基于第一次出现的拆分字符串,带有occurance

Javascript 正则表达式:基于第一次出现的拆分字符串,带有occurance,javascript,regex,string,split,Javascript,Regex,String,Split,我的正则表达式很差。请同情我,帮我一把。 我试图通过第一次出现和(区分大小写)将字符串拆分为一个长度为2的数组。我不知道我们要开始了,有人能帮我吗 var strArr = "Thing And other thing".split(/magic regex/); expect(strArr).to.deep.equal(["Thing","And other thing"]); var strArr = "Thing and other thing".split(/magic rege

我的正则表达式很差。请同情我,帮我一把。 我试图通过第一次出现
(区分大小写)将字符串拆分为一个长度为2的数组。我不知道我们要开始了,有人能帮我吗

 var strArr = "Thing And other thing".split(/magic regex/);
 expect(strArr).to.deep.equal(["Thing","And other thing"]);

 var strArr = "Thing and other thing".split(/magic regex/);
 expect(strArr).to.deep.equal(["Thing and other thing", ""]);

 var strArr = "One Thing And other thing And yet another thing".split(/magic regex/);
 expect(strArr).to.deep.equal(["One Thing","And other thing And yet another thing"]);

 var strArr = "yep, just one thing".split(/magic regex/);
 expect(strArr).to.deep.equal(["yep, just one thing", ""]);

更新这正是我所需要的工作方式,但仍然很难看:

  parser = function(str) {
    var spl;
    spl = str.split(/\s(?=And )/);
    if (spl.length > 1) {
      spl = [spl.shift(), spl.join(" ")];
    } else {
      spl = [str, ''];
    }
    return spl;
  };
我建议做一个简单的测试,然后检查数组是否有一个或两个


strArr.split(“And”,2).长度

这不需要正则表达式。只需获取字符串中
和“
的第一个索引:

var i = str.indexOf("And");
var strArr;
if (i == -1) {
  strArr = [ str ];
} else {
  strArr = [ str.substr(0, i), str.substr(i) ];
}

虽然Guffa的方法是有效的,但如果您最终需要用正则表达式的方式来实现这一点,那么以下方法将有效(通过积极的前瞻):

要测试:

alert(JSON.stringify(spl));


已更新以确保它在
[space]和[space]

上拆分。是否尝试了
string.split('And')
?要仅检查字符串中是否存在字符串,可以使用Indexofies。它没有完成所有的单元测试。@adeneo我可以编写一个函数和if语句,并使用indexof完成所有的测试。但我认为正则表达式会更优雅,这个问题似乎离题了,因为它要求工作代码的实现更干净。因此,这将是更合适的。我不认为这将导致理想的输出。关于
limit
参数:“split方法仍然会在
分隔符的每个匹配项上进行拆分,但它会将返回的数组最多截断为
limit
元素。”虽然这也会找到
BAnd
,但使用regex是否无法更优雅地执行此操作?@anubhava:如果愿意,您可以查找
”和“
”,但问题并没有规定它应该只查找一个“And”,这是一个单独的单词。到目前为止,这对我来说是最好的。但这在每次出现时都会分开,而不仅仅是在第一次出现时。@FelixKling Right,修复了它。如果没有
'和'
这将返回一个2的数组,其中包含
[0]
'
@Freshyeball也修复了这个问题;)thanksOk,又发现了一个问题<代码>“和”
被识别,它需要匹配
“和”
alert(JSON.stringify(spl));