Как я понимаю, идея состоит в том, чтобы разбить строку на смежные пробелы, за исключением случаев, когда пробелы являются частью подстроки, заключенной в одинарные кавычки. Я верю, что это сработает:
/(?:[^ ']*(?:'[^']+')?[^ ']*)*/
, но приглашаю читателей тщательно его изучить.
demo
Это регулярное выражение можно сделать самостоятельно -документирование, написав его в режиме свободного пробега :
/
(?: # begin a non-capture group
[^ ']* # match 0+ chars other than spaces and single quotes
(?: # begin non-capture group
'[^']+' # match 1+ chars other than single quotes, surrounded
# by single quotes
)? # end non-capture group and make it optional
[^ ']* # match 0+ chars other than spaces and single quotes
)* # end non-capture group and execute it 0+ times
/x # free-spacing regex definition mode
Очевидно, что это не будет работать, если есть вложенные одинарные кавычки.
@n.'pronouns ' м. предложил альтернативное регулярное выражение, которое также работает:
/([^ "']|'[^'"]*')*/
демо