2009-11-09 1 views
1

Я пытаюсь выяснить, как разбить строку на термины, доступные для поиска. Мне это нужно, чтобыРазбиение строки с котировкой поиска с регулярными выражениями

  • раскола на пространствах и одинарные кавычках (игнорирование одного символа, Некотируемые результаты)
  • возвращения цитируемых фраз без кавычек

Так что, если я применяю его: «цитирует фразу» отдельные слова было бы вернуть

  • цитирует фразу
  • одиночные
  • слова

Вот что я до сих пор (в JavaScript), но я должен иметь, чтобы лишить котировки отдельно.

var searchArray = temp.match(/"[^"]*"|[^\s']{2,}/g); 
for (index in searchArray) 
    searchArray[index] = searchArray[index].replace(/"/g, ''); 

Есть ли способ сделать это, используя только одно регулярное выражение?

+0

Рассмотрим этот входной текст: '«двойные кавычки»«одиночные кавычки»«Смешанные „цитаты“ здесь»«„Другой“ way'' Кроме того, что вы делаете, если игнорировать «одиночный символ» - это цитата? –

+0

Ну, мне бы не понравились одинарные кавычки, но я хотел, чтобы результаты не были притяжательными. Ради этого обсуждения мы можем игнорировать одинарные кавычки. – Joe

ответ

3

Это, похоже, работает, но я не уверен, что я рассмотрел все случаи. Я не уверен, что он будет работать в IE 5, но это может вас не беспокоить; он работает в IE 6 и во всех других браузерах, которые я пробовал. Он также полосы начальные и конечные пробелы из спичек в кавычках:

var regex = /("?)\s*\b(\S[^\1]*?)\b\s*\1/g; 
var str = '"quoted phrase " single "quoted" words " yes "'; 
var res; 

while ((res = regex.exec(str))) { 
    alert(res[2]); 
} 
+0

Похоже, что я сделаю то, что искал. Большое спасибо! Я хотел бы отметить ваш ответ как полезный, но у меня пока нет достаточной репутации. – Joe

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