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

Javascript 只匹配字符串中两个相同字符中的第一个字符的正则表达式,javascript,regex,Javascript,Regex,我有两个字符串:“1-2”和“1-2” 我希望有一个只匹配两个字符串中第一次出现的连字符的正则表达式,这样拆分将是:[1,2]和[1,-2]。既然我已经为此绞尽脑汁太久了,我该如何做到这一点呢 编辑:这两个字符串也可以出现在同一个字符串中,例如:“1-2-1--2”。因此,一个包含这两种情况的正则表达式是合适的。您可以在-之前使用带有单词边界的拆分: 让我们='1-2-1--2' 设arr=s.split(/\b-/) 控制台日志(arr) //=>[1,2,1,-2)我想你在寻找这样的东西:

我有两个字符串:
“1-2”
“1-2”

我希望有一个只匹配两个字符串中第一次出现的连字符的正则表达式,这样拆分将是:
[1,2]
[1,-2]
。既然我已经为此绞尽脑汁太久了,我该如何做到这一点呢


编辑:这两个字符串也可以出现在同一个字符串中,例如:
“1-2-1--2”
。因此,一个包含这两种情况的正则表达式是合适的。

您可以在
-
之前使用带有单词边界的
拆分

让我们='1-2-1--2'
设arr=s.split(/\b-/)
控制台日志(arr)

//=>[1,2,1,-2)
我想你在寻找这样的东西:

(-?[0-9]+)-(-?[0-9]+)
第一组和第二组可能有负号

更新: 根据您的编辑,此实现将完成以下工作:

var str='-1--2-2--34-1';
var regex=/(?\d+)-?/g;
var匹配=[];
while((match=regex.exec(str))){
matches.push(匹配[1]);
}

console.log(匹配);
您可以使用简单的
split()
,但需要替换。例如

var str='1-2-1--2';
var numArr=str.replace(//--/g,'-~')//波浪号(~)没有平均值,这是一个用于标记负数的字符
.split(“-”)
.map(函数(n){返回编号(n.replace('~','-');});

console.log(numArr)
抱歉,我已经澄清了我原来的问题,解释了两个字符串可以包含在一个字符串中,这样一个正则表达式是正确的。简单而甜蜜,我一点也没有想到这一点。非常感谢!@JohanWentholt啊,知道这一点真是太好了。在我的情况下,谢天谢地,这种情况不会发生,但绝对不会发生冰知道!如果JavaScript有更好的正则表达式支持,你可以使用一个负的lookback
/(?。事实上,如果有的话。这是一直困扰我的问题。
“1-2-1--2”
的预期输出是什么?预期输出是
[1,2,1,-2]
。这确实是我想作为最后手段做的事情,但事实证明确实有一种非常简单的方法可以做到。在我看来,替换和拆分是一个完美的解决方案,但是上面的方法似乎有点麻烦。让我们假设文本中没有使用空字符。我们可以只使用
'1-2-1--2'。替换(/-(*)/g,“\0$1”).split(“\0”)/=>[“1”、“2”、“1”、“2”]
@JohanWentholt为什么需要
(*)
,当没有多个破折号时?@ChayimFriedman您是对的,它也可以更改为
(?)
,但我想还是让它更通用一些为好。