2013-09-23 128 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/); 
相關問題