Как уже упоминалось в комментариях, вы можете достичь этого с помощью отрицаний и классов символов:
const data = "iiisdoso"
const regex = /([^o]+)/g
console.log(data.match(regex))
Это даст вам желаемый результат
["iiisd", "s"]
Но это соответствует любой строке без "о" после этого тоже! Чтобы избежать этого, вам нужно использовать
const regex = /([^o]+)o/g
. В этом случае «o» включается в совпадения и должно быть удалено для каждой строки массива результатов - например, с
mymatch.replace('o','')
Интересно: если вы используете
const regex = /([^o]*)/g
Результат будет
["iiisd", "", "s", "", ""]
Это то, чего я не понимаю. Хорошо - я понимаю, что пустая строка также соответствует регулярному выражению и может быть помещена прямо перед "o". Но почему мы получаем третью пустую строку в самом конце?