JavaScript String.replace 回调以检查每隔一行

标签 javascript regex replace

我正在尝试将 string.replace 函数与回调一起使用,这样我就可以根据数字替换交替索引处的字符。该字符串是一个“板”,只是一串必须用空格替换的主题标签。

例。大小为 8 (8x8) 的棋盘:

########
########
########
########
########
########
########
########

预期输出:

 # # # #
# # # # 
 # # # #
# # # # 
 # # # #
# # # # 
 # # # #
# # # # 

例。大小为 7 (7x7) 的棋盘:

#######
#######
#######
#######
#######
#######
#######

预期输出:

 # # # 
# # # #
 # # # 
# # # #
 # # # 
# # # #
 # # # 

我当前的替换回调逻辑是这样的:

board.replace(/#/g, (matched, index, original) => {
    if (index % 2 === 0) {
       return " ";
    } else {
       return matched;
    }
});

当前的逻辑涵盖了偶数大小的板(例如 8)的情况,但在奇数的情况下,我想替换我替换空白空间的索引。

目前,当通过奇数板时,它会返回:

 # # # 
 # # # 
 # # # 
 # # # 
 # # # 
 # # # 
 # # # 

是否有某种正则表达式可以让我检查交替行?或者在回调中这甚至可能吗?任何帮助将不胜感激。

最佳答案

您必须考虑行号。我会分成几行,然后测试 index + lineNum % 2 === 0

const board = `#######
#######
#######
#######
#######
#######
#######`;

const result = board.split('\n').map((line, lineNum) => {
  return line.replace(/#/g,
      (char, index) => (index + lineNum) % 2 === 0 ? ' ' : '#'
    );
}).join('\n');

console.log(result);

关于JavaScript String.replace 回调以检查每隔一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57954084/

相关文章:

javascript - 通过 JavaScript 提交数据最简单的方法是什么?

regex - 如何使完全不捕获的任意Perl正则表达式成为可能?

regex - 用 sed 或 replace 替换文件中的特定模式

jquery - 使用jquery搜索并替换多个特殊字符

javascript - 有条件地将 div 包装在 div 中

javascript - 如何设置dojox/form/CheckedMultiSelect的宽度?

javascript - D3 力导向图节点上的标签/文本

python - 如何使用嵌套字典替换其他列中的字符串

JavaScript:如何使用正则表达式从字符串中删除空行?

git - 如何通过一个简单的步骤将存储库中 *Foo* 的 *所有* 实例(内容、文件名和提交消息)批量替换为 *Bar*?