Строка заменяет регулярные выражения принимать токены только снаружи [] - PullRequest
2 голосов
/ 01 сентября 2011

Я пытаюсь заменить все пробелы в строке на '+'.Но следует игнорировать игнорировать пробелы внутри [].Кто-нибудь знает, как это сделать с помощью регулярного выражения.

Пример:

latitude[0 TO *] longitude[10 TO *]

следует заменить на

latitude[0 TO *]+longitude[10 TO *]

Ответы [ 2 ]

2 голосов
/ 01 сентября 2011

Заменить («глобальный» флаг включен)

\s(?=[^\]]*(?:\[|$))

с

+

Объяснение

\s          # white-space (use an actual space if you want)
(?=         # but only when followed by (i.e. look-ahead)...
  [^\]]*    #   ...anything but a "]"
  (?:       #   non-apturing group ("either of")
    \[      #     "["
    |       #     or
    $       #     the end of the string
  )         #   end non-capturing group
)           # end look-ahead

Это соответствует любому пространству, которое не находится внутри квадратной скобки, при условии, что в строке нет неправильно открытых / закрытых квадратных скобок и что квадратные скобки никогда не вкладываются.

1 голос
/ 01 сентября 2011

Я предлагаю использовать состояние машины вместо регулярного выражения. Таким образом, вы можете прекратить замену пробелов, когда вы «внутри» []. Если вы используете регулярное выражение, вам, вероятно, придется использовать упущение, что усложнит задачу. Здесь есть похожий пример:
Заменить пробелы вне кавычек регулярным выражением

...