如何用两个正则表达式分割字符串

时间:2013-09-23 04:57:12

标签: javascript regex

我需要按字符串!(前后空格)和一个字符|分割字符串。

function split (str) {
    return str.split (/\s!\s/)
}

result = split ("hello world ! hello | world! hi ");
console.log (result); // result must be: ["hello world", "hello", "world! hi "]

我无法弄清楚该怎么做。现在我所做的只是!分裂。需要对char |进行筛选,因为它在正则表达式中表示OR

4 个答案:

答案 0 :(得分:4)

听起来你想要这样的东西:

function split (str) {
    return str.split (/\s[!|]\s/)
}

这将使用空格字符包围的!|来破坏字符串。

您可以看到它正常工作here

但一般来说,如果你想使用|(或任何特殊字符)作为文字,你可以使用反斜杠(\)来逃避它,如下所示:

/\s!\s|\s\|\s/

答案 1 :(得分:1)

您可以使用管道运算符来包含: 使用此正则表达式/ ! | \| /

答案 2 :(得分:1)

在这种情况下,您可以(并且应该)使用字符类as p.s.w.g shows执行此操作。

一般问题的答案

  

如何用两个正则表达式分割字符串

...是使用“交替”:

str.split(/first expression|second expression/);

例如:

str.split(/foo|bar/);

...会在foobar上分开。

在这种情况下,它将是:

str.split(/\s(?:!|\|)\s/);

(我将交替置于非捕获组中以控制交替中的内容。)

但同样,只有两个字符(而不是两个不同的表达式),你最好使用一个字符类:

str.split(/\s[!|]\s/);

答案 3 :(得分:1)

或正则表达式为|

所以,如果|之前和之后的空格

function split (str) {
    return str.split(/\s!\s|\s\|\s/);
}

否则:

function split (str) {
    return str.split(/\s!\s|\|/);
}