Javascript: split by this|that

Javascript: split by this|that

本文关键字:that this by split Javascript      更新时间:2023-09-26

我怎么能像这样拆分字符串

var str = "M50 0 L0 100 L100 100 L50 0 z M0 0 L100 0 L50  100 L0 0 Z";
var arr4String = str.split('z|Z');

我希望得到一个包含 3 个元素的数组:

["M50 0 L0 100 L100 100 L50 0", "M0 0 L100 0 L50  100 L0 0", ""]

使用正则表达式。 使用 g 标志表示从头到尾搜索整个字符串,以便它不会在第一次命中z|Z时停止。 i标志使搜索不区分大小写。

  var str = "M50 0 L0 100 L100 100 L50 0 z M0 0 L100 0 L50  100 L0 0 Z";
  var arr4String = str.split(/z/gi);

如果要拆分正则表达式,则需要将正则表达式作为参数传递给split

var str = "M50 0 L0 100 L100 100 L50 0 z M0 0 L100 0 L50  100 L0 0 Z";
var arr4String = str.split(/z|Z/);
                           ^   ^

生产:

["M50 0 L0 100 L100 100 L50 0 ", " M0 0 L100 0 L50  100 L0 0 ", ""]
                             ^    ^                         ^

(请注意额外的空格,因为正则表达式不会删除这些空格(。

如果要修剪结果,可以使用:

...split(/'s*z's*/i);

或者您可以简单地链接:

...split(/z/i).map(function (val) {
    return val.trim();
});

在这里,您可以使用/'s*z's*/i正则表达式进行拆分:

var str = "M50 0 L0 100 L100 100 L50 0 z M0 0 L100 0 L50  100 L0 0 Z";
var arr4String = str.split(/'s*z's*/i);
document.body.innerHTML = "<pre>" + JSON.stringify(arr4String,0,4) + "</pre>";

/'s*z's*/i正则表达式将在z之前和之后匹配零个或多个空格('s*((由于/i修饰符而执行不区分大小写的搜索(。

var arr4String = str.replace('z','Z').split('Z');

你很接近,但你想要一个正则表达式而不是一个字符串,你可以通过使用正斜杠而不是引号 ( /z|Z/ (。

但是,仅使用它并不能得到您想要的。您实际上想要一个正则表达式来删除"z"字符周围的空格。此外,假设如果您传入一个包含"L100z200"的字符串,您也不希望它在中间拆分。为此,您可以使用'b来确保存在单词边界。给你:

var str = "M50 0 L0 100 L100 100 L50 0 z M0 0 L100 0 L50  100 L0 0 Z";
var arr4String = str.split(/'b's*z's*'b/i);
console.log(arr4String);
// Exactly:
// ["M50 0 L0 100 L100 100 L50 0", "M0 0 L100 0 L50  100 L0 0", ""]

只是为了完整性(可能比/z/i 更快(:

var arr4String = str.split(/[zZ]/);