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' ]
匹配对象似乎不是多维的,或者至少,它只捕获第一个匹配项。
我错过了一些基本的东西吗?(正如我在顶部所问的)有明智的选择吗?
我将在这个答案的开头说我对正则表达式知之甚少,但是,我刚刚执行了自己的测试,发现问题可能与正则表达式中的\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
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