我有一个带有forEach的JavaScript文件,它有两个正则表达式,它们将根据if触发。我把哪个条件放在第一位并不重要。一个正则表达式replace具有json属性的当前值,另一个具有以前的迭代值。
我尝试过切换if语句。我已经删除了if,并一次尝试一个正则表达式。一个正则表达式似乎正在使用前面的循环,这并不重要
stats.forEach( (stat) => {
if(display_detail) {
lsm.displayString = lsm.displayString.replace(/(\d{1,4})\s([_a-zA-Z][^\0]*)\s(\()()(\))/g, lsm.count + " $2 $3$4" + lsm.detail_array.join(',') + "$5");
} else {
lsm.displayString = lsm.displayString.replace(/(\d{1,4})\s([_a-zA-Z][^\0]*)/g, lsm.detail_array.join(',') + " $2")
}
});JSON元素
{ count: 2,
displayString: '1 POne (9)',
detail_array: [ 9, 14 ] }在我期望详细信息( diplay_detail )的完整运行后,我期望它打印如下:2 POne (9,14)
我得到了1个POne (9)
但是如果我通过另一个正则表达式运行它,我会得到我期望得到的结果:
9,14 POne ()
我确信它会运行第一个循环,就像json中存储的displayString所显示的那样。displayString从以下位置开始
0 POne ()
发布于 2019-09-27 23:14:11
正则表达式在第二轮中有缺陷...我把问题复杂化了。我不需要检查细节,我只需要替换括号,因为我替换了括号中的整个字符串。这解决了它,也许不是那么优雅,但它是有效的。
lsm.displayString = lsm.displayString.replace(/(\d{1,4})\s([_a-zA-Z][^\0]*)\s(\()[\(0-9,\)].*(\))/g, lsm.count + " $2 (" + lsm.detail_array.join(",") + ")");https://stackoverflow.com/questions/58134710
复制相似问题