当前位置: 首页 > 知识库问答 >
问题:

节点。js RegExp不处理带有“g”标志的多个匹配?

尚宏硕
2023-03-14

Javascript的RegExp#exec()是否不使用“g”标志处理多个结果?如果没有,有什么替代方案?

我有这样一个字符串:

a*  2
b   3
c*  4

我只想提取那些有星号的行。我写了这个regexp:

/\w+\*\s+(\d+)\n/g

(即,它匹配一个单词,后跟一个文字星号,后跟空格,后跟一组捕获的数字,后跟换行符,并且启用了全局标志)。

在令人愉快的https://regex101.com/#javascript,将字符串应用于regexp将返回两个匹配项,如预期的那样:

Match 1
1.   '2'
Match 2
1.   '4'

但在节点中。js,我明白了:

> match = re.exec(str)
> match
[ 'a*  2\n', '2', index: 0, input: 'a*  2\nb   3\nc*  4\n' ]

匹配对象似乎不是多维的,或者至少,它只捕获第一个匹配项。

我错过了一些基本的东西吗?(正如我在顶部所问的)有明智的选择吗?

共有2个答案

胡意致
2023-03-14

我将在这个答案的开头说我对正则表达式知之甚少,但是,我刚刚执行了自己的测试,发现问题可能与正则表达式中的\n有关。

需要\n意味着在您发布的代码段中,如果c*4之后没有换行符,则该行将不匹配。

根据我在Regexr上的测试,\w\*\s(\d)工作正常。

正如我所说的,我可能要离开这里一英里,但这只是我的想法。

编辑:我的测试结果:

/\w+\*\s+(\d+)\n/g

a*  2   [MATCH]
b   3
c*  4

以及:

/\w+\*\s+(\d+)/g

a*  2   [MATCH]
b   3
c*  4   [MATCH]

使用原文,但在c后加一个换行符:

/\w+\*\s+(\d+)\n/g

a*  2   [MATCH]
b   3
c*  4   [MATCH]
\n

鲜于德业
2023-03-14

Javascript的RegExp#exec()确实支持多个匹配项,但不会一次返回所有匹配项。您需要多次调用exec()。MDN上此功能的文档解释了这个问题,并给出了一个如何将exec()用于多个匹配项的示例。https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/exec#Examples

var myRe = /ab*/g;
var str = 'abbcdefabh';
var myArray;
while ((myArray = myRe.exec(str)) !== null) {
  var msg = 'Found ' + myArray[0] + '. ';
  msg += 'Next match starts at ' + myRe.lastIndex;
  console.log(msg);
}
 类似资料:
  • 使用XPath,我想“匹配整个单词”(用户选项,就像VS搜索一样)。 似乎函数

  • 尝试使用FTL模板进行转换时出现异常!freemarker.core.nonNumericalException:对于“-”左手操作数:需要一个数字,但它的计算结果是序列+散列(包装器:f.e.dom.nodelistmodel):==>item.target[在模板“marketing/widgets/freemarker/newblogpost-update.ftl”中,第31行,第105列]

  • 我想使用py2neo的OGM来表示从一个节点类型到两个节点类型的关系。 这段关系的“结束”应该指向一辆车,而不是一栋房子。但显然py2neo并不关心那么多,而是像预期的那样将所有东西都存储在数据库中:一个人、一辆车和一栋房子通过拥有关系连接起来。 现在的问题是使用上面的类来检索节点和关系。当节点属性正确加载时,关系不是: 这导致: 此行为与类对象一致。 我如何在py2neo.ogm中用同一个类建模

  • 我正在构建一个Java应用程序。这个应用程序是一个典型的“油漆”应用程序,你可以选择一种颜色,并在画布上绘制。除了...我将有一个圆圈数组分布在画布的顶部。我希望这些圆立即改变颜色,如果,当用户正在绘制和鼠标得到圆的X(10)个像素(其中X是绘制的线的宽度除以2)。 这是我的密码。我有一张画布是一组的一部分。我还创建了一个圆圈节点,并将其作为组的一部分。我想我需要以某种方式创建一个鼠标事件,当用户

  • 我正忙于在窗格上绘制节点的练习。我的第一个目标是处理100万个节点,然后将其提升到1500万个。 我有一个自定义的对象图,我可以在此对象中添加边和节点。每个节点对象都有一个椭圆,我可以调用和绘制,并且与边缘对象相同。目前,我有一个为节点生成随机位置的函数。 我现在使用一个滚动窗格来实现窗格的平移和查看所有节点。 我觉得用哈希图是个好主意 我使用以下代码将节点添加到哈希图: 然后,当我平移时,我得到

  • null 问题出在我希望启动Spring批处理应用程序时。当阅读这里的说明http://static.springsource.org/spring-batch/reference/html/configurejob.html#runningjobsfromcommandline时,它假设每个作业都有一个Spring配置文件,但我不希望这样做。 如何从命令行运行使用多个bean配置文件的Sprin