LINUX.ORG.RU

Символ совпадающий с метасимволом, за исключением того-то — сего-то.

 ,


0

1

Как написать, типа, [\w] но [^_] — символ, совпадающий с любым из набора, выраженного данным метасимволом, или набором, включающем в себя метасимволы, (напр [.\w]), кроме (исключая) указанный(е)(напр [^_a]). Интересует не конкретно данный пример, а вообще, как это делается — указываем метасимвол или набор, а далее список исключений, типа, «обедняем» метасимвол. Желательно, решение совместимое с JS, но не обязательно.

Спасибо.



Последнее исправление: terminator-101 (всего исправлений: 3)
Ответ на: комментарий от terminator-101

ну вообще, наверное X & Y = not (not X | not Y)

т.е. \w & [^_] = [^(\W|_)]

и еще, наверное, возможно, использовать заглядывание вперед ((?=[^_])\w)

liaonau
()
Ответ на: комментарий от liaonau

Прошу прощения, работает, скобки не расставил:)


re=/((?!_)\w)+/
w("foo_foo".match(re))
// [ 'foo', 'o', index: 0, input: 'foo_foo' ]
//  

Спасибо большое, это оптимальный вариант.

terminator-101
() автор топика
Ответ на: комментарий от terminator-101

Кажись понял, тут тогда надо комбинировать `(?! ... )` с `|`

console.log(/(?!a|\d)(.)/.exec(«1»));

console.log(/(?!a|\d)(.)/.exec(«b»));

или можно так:

console.log(/(?!a)(\w)/.exec(«b»));

console.log(/(?!a)(\w)/.exec(«a»));

Собственно как-то так.

SV0L0CH
()
Ответ на: комментарий от terminator-101

и даже так


re=/((?![_a])[*\w])+/
console.log("f*o_foo".match(re))
console.log("ffao_foo".match(re))
//  [ 'f*o', 'o', index: 0, input: 'f*o_foo' ]
//  [ 'ff', 'f', index: 0, input: 'ffao_foo' ]
то что нужно, короче. Всем спасибо.

terminator-101
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.