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

发布于 2024-12-06 15:42:59 字数 270 浏览 0 评论 0原文

给定字符串

s1 = "abcfoodefbarghi" 

以及

s2 = "abcbardefooghi"

如何将 s1 拆分为“abc”和“defbarghi” 和 s2 到“abc”和“defooghi” 也就是说:在第一次出现字符串“foo”或“bar”时将字符串分成两部分

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

Given strings

s1 = "abcfoodefbarghi" 

and

s2 = "abcbardefooghi"

How can I split s1 into "abc" and "defbarghi"
and s2 into "abc" and "defooghi"
That is: split a string into two on the first occurrence of either one of strings "foo" or "bar"

I suppose this could be done with s.split(/regexp/), but what should this regexp be?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

一向肩并 2024-12-13 15:42:59

以这种方式使用正则表达式:

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 */

RE 的解释:

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

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

Use a Regular Expression in this way:

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 */

Explanation of the RE:

  • [\S\s]*? matches just enough characters to match the next part of the RE, which is
  • (foo|bar) either "foo", or "bar"
  • [\S\s]* matches the remaining characters

Parentheses around a part of a RE creates a group, so that the grouped match can be referred, while (?:) creates a non-referrable group.

别靠近我心 2024-12-13 15:42:59
str.replace(/foo|bar/,"\x034").split("\x034")

想法是用特殊(不可见)字符串替换第一次出现,然后针对该字符串进行拆分。

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

idea is replace the first occurrence with a special(invisible) String, and then split against this string.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文