正则表达式仅匹配字符串中两个相同字符的第一个

时间:2018-07-26 16:57:23

标签: javascript regex

我有以下两个字符串:"1-2""1--2"

我想有一个仅与两个字符串中的连字符的第一个匹配的正则表达式,这样拆分将是:[1,2][1,-2]。既然我已经为此动了太久了,我将如何实现?

编辑:两个字符串也可以出现在同一字符串中,例如:"1-2-1--2"。因此,涵盖这两种情况的单个正则表达式将是有序的。

3 个答案:

答案 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);