2016-11-03 57 views
2

JavaScript允許您根據正則表達式拆分字符串。僅當分隔符位於特定字符的旁邊時,是否可以使用此功能來分割字符串?根據javascript中的側翼字符拆分字符串

例如,如果我想分割字符串12-93而不是at-13使用-字符?那可能嗎?

使用正則表達式看起來很有前途,但做"12-93".split(/[0-9]-[0-9]/)時產生["1", "3"],因爲側翼數字被認爲是分隔符的一部分。

我可以指定上面的分割模式(一個破折號前後有一個數字),而不會截斷側翼數字嗎?

其他例子

"55,966,575-165,162,787"應該產生["55,966,575", "165,162,787"]

"55,966,575x-165,162,787"應該產生["55,966,575x-165,162,787"]

"sdf55,966,575-165,162,787"應該產生["sdf55,966,575", "165,162,787"]

+0

瞭解這個什麼:'/ d {2} -d {2} /'指定兩個數字破折號和兩個數字? –

回答

1

使用兩個相鄰的字符集似乎工作。

https://regex101.com/r/uFHMW1/1

([0-9,a-z]+?[0-9]+)-([0-9]+[0-9,a-z]+)

見例如試試這個(住在這裏https://repl.it/EOOQ/0):

var strings = [ 
 
"55,966,575-165,162,787", 
 
"55,966,575x-165,162,787", 
 
"sdf55,966,575-165,162,787", 
 
]; 
 

 
var pattern = '^([0-9,a-z]+?[0-9]+)-([0-9]+[0-9,a-z]+)$'; 
 
var regex = new RegExp(pattern, 'i'); 
 

 
var matched = strings.map(function (string) { 
 
\t var matches = string.match(regex); 
 
\t if (matches) { 
 
\t \t return [matches[1], matches[2]]; 
 
\t } else { 
 
\t \t return [string]; 
 
\t } 
 
}); 
 

 
console.log(matched)

您也可以運行在上面表達split(),如:

string.split(re).filter(str => str.length)

在使用Array.filter()擺脫當你的正則表達式匹配輸入創建的開頭和結尾的空字符串的。

var strings = [ 
 
"55,966,575-165,162,787", 
 
"55,966,575x-165,162,787", 
 
"sdf55,966,575-165,162,787", 
 
]; 
 
var pattern = '^([0-9,a-z]+?[0-9]+)-([0-9]+[0-9,a-z]+)$'; 
 
var regex = new RegExp(pattern, 'i'); 
 

 
var matched = strings.map(string => string.split(regex).filter(str => str.length)); 
 

 
console.log(matched)

0

嘗試使用non-capturing超前。您正在使用正則表達式來捕獲找到的所有字符,然後將該結果用作分隔字符。