2013-09-23 129 views
1

我需要按字符串!(前后空格)和一个字符|拆分字符串。如何通过两个正则表达式拆分字符串

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 "] 

我不知道该怎么做。现在我所做的只是通过!进行分割。加字符|需要进行筛选,因为它意味着OR正则表达式。

回答

1

或正则表达式是|

所以如果空间前后|

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

其他:

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

听起来像是你想是这样的:

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

这将通过其中任何一个被空白字符包围的!|断线。

你可以看到它的工作here

但在一般情况下,如果你想使用|(或任何特殊字符)作为文字,你可以用一个反斜杠(\),这样逃吧:

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

您可以使用管道操作符同时包括: 使用这个表达式/ ! | \| /

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/); 
相关问题