JavaScript中的正则表达式替换,某些部分保持不变

JavaScript中的正则表达式替换,某些部分保持不变,javascript,regex,backreference,Javascript,Regex,Backreference,我需要解析如下所示的字符串: -38419-indices-foo-7119-attributes-10073-bar 数字后面跟有一个或多个单词,所有单词都用破折号连接。我需要得到这个: [ 0 => '38419-indices-foo', 1 => '7119-attributes', 2 => '10073-bar', ] 我曾想过尝试用:替换数字前的破折号,然后使用.split(“:”)-我该怎么做?我不想替换其他破折号。在我看来,模式是直截了

我需要解析如下所示的字符串:

-38419-indices-foo-7119-attributes-10073-bar
数字后面跟有一个或多个单词,所有单词都用破折号连接。我需要得到这个:

[ 
   0 => '38419-indices-foo',
   1 => '7119-attributes',
   2 => '10073-bar',
]

我曾想过尝试用
替换数字前的破折号,然后使用
.split(“:”)
-我该怎么做?我不想替换其他破折号。

在我看来,模式是直截了当的:

\d+\D+
甚至要去掉尾随的
-
,您可以选择

(\d+\D+)(?:-|$)

你可以在这里看到:

var myString=“-38419-index-foo-7119-attributes-10073-bar”;
var myRegexp=/(\d+\d+(:-|$)/g;
var结果=[];
match=myRegexp.exec(myString);
while(匹配!=null){
//匹配文本:匹配[0]
//匹配开始:match.index
//捕获组n:匹配[n]
结果:推送(匹配[1]);
match=myRegexp.exec(myString);
}
控制台日志(结果);
//备选案文2
让alternative_results=myString.match(/\d+(?:(?!-\d |$)++/g);
控制台日志(可选结果)逻辑
使用量词的惰性匹配
*?

正则表达式
*?((\d+)\d*)(?!-)

测试字符串 -38419-index-foo-7119-attributes-10073-bar-333333-DFDFDF-DFDFDF-1232323-dfdfdfdf

比赛

进一步步骤
您需要从匹配项中拆分并插入到所需的数组中。

这是一个不错的解决方案。您可以使用
\d+\d*(?!-)
放弃捕获组@卡里斯沃维兰:谢谢。但不幸的是,没有,请看(并查看捕获的组)。问题是
\D*
也会吃掉
-
。@CarySwoveland:您可以使用一种温和的贪婪令牌技术,就像在啊,是的,不需要尾随连字符一样。然后
\d+\d*(?=-|$)
以避免捕获组。我看到我在上一篇评论中提到的内容正是您所拥有的,只是您捕获了
\d+\d*
。为什么要这样做,而不仅仅是使用与捕获组内容相同的匹配?
\d+(?:(?!-\d|$).)+