2011-09-23 111 views
3

给出一个字符串如何在JavaScript中第一次出现多个子字符串时分割字符串?

s1 = "abcfoodefbarghi" 

s2 = "abcbardefooghi" 

我如何分割S1为 “ABC” 和 “defbarghi” 和S2为 “ABC” 和 “defooghi” 即:拆分字符串在第一次出现任何一个字符串“foo”或“bar”时分成两部分

我想这可以用s.split(/regexp/)来完成,但是这个正则表达式应该是什么?

+0

看这个问题: [分割字符串一次在javascript](http://stackoverflow.com/questions/2878703/split-string-once-in-javascript) –

回答

3

使用正则表达式这样:

var match = s1.match(/^([\S\s]*?)(?:foo|bar)([\S\s]*)$/); 
/* If foo or bar is found: 
    match[1] contains the first part 
    match[2] contains the second part */ 

解释稀土:

  • [\S\s]*?仅匹配足够的字符的RE,这是
  • (foo|bar)的下一个部分匹配“foo”或“bar”
  • [\S\s]*匹配其余字符

围绕一部分RE的括号会创建一个组,以便可以引用分组的匹配,而(?:)会创建一个不可引用的组。

+1

这工作,并很好的解释。最后,我需要匹配**最后一次**出现并得到分割字符串,所以我做了/ ^([\ S \ s] *)(foo | bar)([\ S \ s] *? )$ /'。谢谢。 –

2
str.replace(/foo|bar/,"\x034").split("\x034") 

想法是用一个特殊的(不可见的)字符串替换第一个匹配项,然后对这个字符串进行拆分。

相关问题