Regex: не соответствуйте, если строка содержит пробел

Я, может казаться, не выясняю regex шаблон для соответствующих строк, только если он не содержит пробел. Например,

"this has whitespace".match(/some_pattern/)

должен возвратиться nil но

"nowhitespace".match(/some_pattern/)

должен возвратить MatchData со всей строкой. Кто-либо может предложить решение для вышеупомянутого?

10
задан Bart Jedrocha 7 January 2010 в 04:10
поделиться

7 ответов

В Руби я думаю, что это было бы

/^\S*$/

Это означает "начать, сопоставить любое количество не белых символов, конец"

.
21
ответ дан 3 December 2019 в 14:34
поделиться
>> "this has whitespace".match(/^\S*$/)
=> nil
>> "nospaces".match(/^\S*$/)
=> #<MatchData "nospaces">

^ = начало строки

\S = не-белый символ, * = 0 или более

$ = конец строки

.
3
ответ дан 3 December 2019 в 14:34
поделиться

Не уверен, что вы можете сделать это в одном шаблоне, но вы можете сделать что-то вроде:

"string".match(/pattern/) unless "string".match(/\s/)
3
ответ дан 3 December 2019 в 14:34
поделиться
   "nowhitespace".match(/^[^\s]*$/)
1
ответ дан 3 December 2019 в 14:34
поделиться

str.match(/^\S*some_pattern\S*$/)

0
ответ дан 3 December 2019 в 14:34
поделиться

Вы хотите:

/^\S*$/

Это говорит "соответствовать началу строки, затем нулю или больше небелого пробела, затем концу строки". Условие для предопределенных классов символов заключается в том, что строчная буква относится к классу, а прописная - к его отрицанию. Таким образом, \s относится к пробельным символам, в то время как \S относится к небелым.

.
1
ответ дан 3 December 2019 в 14:34
поделиться

Вы всегда можете выполнить поиск для пробелов, а затем отрицать результат:

"str".match(/\s/).nil?
4
ответ дан 3 December 2019 в 14:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: