2017-01-27 3 views
0
var mystring = 'Hello test1 "test2 but one word" test3 test4 '; 

var mystring_ar= mystring.split(/\s+/); 

хорошо у меня это /\s+/ выражения, так что я могу отделить от пространства, но моя проблема, я хочу, чтобы отделить от пространства и регулярного выражения не должен индивидуальный слово, если слова в окружении ", как "test2 but one word" Например ниже:Javascript отдельно с регулярным выражением, но взять как одно слово, если строка окружена определенными символами?

'Hello test1 "test2 but one word" test3 test4 '.split(regex) 
=> ['Hello','test1','test2 but one word','test3','test4'] 

это возможно?

Edited Я нашел половину решения, но не закончил ниже код Seperate правильно, но работает только для слов, например, если строка a/b/as d, он не будет отделить его a/b/as and d, он будет отделить его a,b,as,d

keywords = keywords.match(/\w+|"[^"]+"/g);

Но я думаю, что решение должно быть с split .Это должно работать как отдельно от whitespaces и не разделите внутри ""

+0

Связанный: [разделить строку пробелами, сохраняя процитированные сегментов, что позволяет спасся цитаты] (https://stackoverflow.com/questions/4031900/split-a-string-by-whitespace –

+0

@JonathanLonowski Спасибо, что решил мою проблему :) – Jake

+0

@JonathanLonowski, но у меня возникла проблема с решением, которое я нашел в ссылке. Он использует '/ \ w + |" [^ "] +"/g ', но он принимает только слова, но мне нужно отдельно от пробелов, но если оно находится между' "asd asd asd". Оно не должно разделять их. Но это похоже на '/ \ w + |" [^ " ] + "/ g' это выражение также разделяет 't1/t2 на t1 и t2, что неверно для этой проблемы' – Jake

ответ

0

Это работает проще с match. Чтобы соответствовать любому небеловому пространству, вы можете использовать противоположное значение \s, то есть \S. Поскольку котировки также соответствуют \S, вам также необходимо сначала проверить для цитаты, и только поместить \S в качестве альтернативы этому. Возможно, вы также хотите проигнорировать цитируемую часть, когда ее немедленно следует не-пробел, например "thi"s word", возможно, не станет ['thi','s','word'], но ['"thi"s','word']. Что вы можете сделать с негативным взглядом вперед: (?!\S). Все вместе это становится:

/"[^"]*"(?!\S)|\S+/g 

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

  • Нет связанных вопросов^_^