2016-10-02 28 views
0

我有串解析jQuery的喜歡選擇正則表達式

"foo.bar#baz" 

,我想

["foo", ".bar", "#baz"] 

我試着用

"foo.bar#baz".match(/[^.]+/g).join(' .').match(/[^#]+/g).join(' #').split(' '); 

這樣做,但我認爲這是太長時間。你知道更短的版本嗎?

PS:

我不想讓

["foo", "bar", "baz"] 

什麼我可以

"foo.bar#baz".match(/[.#]+/g); 
+0

爲什麼你想通過正則表達式來做到這一點?另外,爲了記錄,這些都是CSS選擇器 - jQuery使用它們是因爲它們已經存在。 – vlaz

+0

@charlietfl因爲通過正則表達式來做這種事情似乎很奇怪。並且'regex'標籤確實遇到了很多XY正則表達式的問題,因爲正則表達式出錯的問題。根據_why_的答案,OP的問題的實際答案可能只是「不要使用正則表達式」。 – vlaz

+0

@vlaz我認爲正則表達式是一個很好的選擇。但我要求更短的版本,所以沒有正則表達式的答案也很好 – Bolli

回答

0

做您可以使用正向前查找來分割字符串,但保留定界符。

var myString = "foo.bar#baz"; 
 
var myRegex = /(?=[\.#])/g; 
 
console.log(myString.split(myRegex));

正先行的語法是(?=)

0

該輸出作爲

[ 
    "foo.bar#baz", 
    "foo", 
    ".bar", 
    "#baz" 
] 

console.log("foo.bar#baz".match(/(.+)(\..+)(\#.+)/i));