我有以下两个字符串:"1-2"
和"1--2"
。
我想有一个仅与两个字符串中的连字符的第一个匹配的正则表达式,这样拆分将是:[1,2]
和[1,-2]
。既然我已经为此动了太久了,我将如何实现?
编辑:两个字符串也可以出现在同一字符串中,例如:"1-2-1--2"
。因此,涵盖这两种情况的单个正则表达式将是有序的。
答案 0 :(得分:4)
您可以将此split
与-
之前的单词边界一起使用:
let s='1-2-1--2'
let arr = s.split(/\b-/)
console.log(arr)
//=> [1, 2, 1, -2)
答案 1 :(得分:1)
我认为您正在寻找这样的东西:
(-?[0-9]+)-(-?[0-9]+)
第一和第二组可能带有负号
更新: 根据您的修改,此实现将完成这项工作:
var str = '-1--2-2--34-1';
var regex = /(-?\d+)-?/g;
var matches = [];
while((match = regex.exec(str))) {
matches.push(match[1]);
}
console.log(matches);
我更喜欢使用split,但是如果您只想使用RegEx,那很好。
答案 2 :(得分:1)
您可以使用简单的split()
,但可以替换。例如,
var str = '1-2-1--2';
var numArr = str.replace(/--/g, '-~') // The tilde (~) have no mean, this is a charceter for mark a negative number
.split('-')
.map(function(n) { return Number(n.replace('~', '-')); });
console.log(numArr);