Хорошо, объясню.
const inputNumbers = document.querySelectorAll('input');
Получает список инпутов, далее надо их все перебрать, для этого нужно организовать, например, цикл. У каждого инпута много есть свойств и методов, так как это объект DOM, и чтобы получить введенные данные надо обратиться к свойству value. В результате получим строку, где будет введенные данные. Теперь можно работать с этими данными и применять к ним replace. Но, данные в инпуте от этого не изменяться. То, что вернет метод replace надо присвоить в этот самый инпут, из которого он был взят.
Остается одно НО! Если написать код как я объяснил, но в таком виде, как у Вас, то инпуты очистятся ровно один раз, при вызове функции. Чтобы код работал всегда, когда человек что-то вводит в инпут нужно повесить на инпуты обработку событий: change - человек сможет ввести, что угодно, но как только он уберет фокус с поля ввода отработает функция и все ненужное вырежет; input - функция будет вырезать как только человек что-то будет вводить, при каждом вводе, на каждом символе тут же будет вырезать. Как по мне второй вариант самое то. При таком раскладе, можно просто функцию-обработчик повесить на инпуты, и внутри нее работать с target события и без цикла. Правда циклом надо пройтись, чтобы повесить обработку событий на все инпуты.