2014-01-21 5 views
0

Я работаю над функцией макета сетки. Я около 1/2 пути туда и ударил стену.Замените некоторую строку в javascript

Я использую строку и запускаю одну функцию RegExp для каждого окна. Я помещаю в сетку, чтобы определить, где она будет соответствовать (в зависимости от количества строк/столбцов, которые она занимает). Это работает успешно. Демонстрация:

function findSpace(columns, rows){ 
    var totalColumns = 4; 
    var grid = "11002100020000200002"; 
    //1 represents occupied space, 0 empty space, and 2 a new line 
    var reg = RegExp("(0{" + columns + "})(([0-2]{" + (totalColumns - columns + 1) + "})0{"+columns+"}){" + (rows-1) + "}"); 
    var i = grid.search(reg); 
    return i.index; 
} 

Возвращает индекс матча, давая мне знать, где в моей сетке это поле будет падать. См. fiddle.

Я не понимаю, как заменить «0» на «1». Выполнение grid.replace(reg, "1"), конечно же, заменяет все от начала матча до конца синглом «1». Мне нужно заменить только «0» s, которые будут заняты для строк и столбцов, каждый из которых имеет «1», а не любые совпадающие символы.

Это упражнение по-разному. Да, я мог бы сделать это с помощью структуры данных массива. Что это за забава? Я не ищу «не делай так, как делайте это так, как все остальные» отвечает, я пытаюсь определить наиболее эффективный способ решения моего сценария.

Спасибо!

ответ

1

String#replace способ может быть билет. Если вы передаете регулярное выражение и функцию в качестве второго параметра, вы можете динамически манипулировать каждым совпадением.

Источник: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace

+0

Это как раз может быть билет, это хорошая мысль. Я буду работать над этим и вернуться к вам. –

Смежные вопросы