Как сопоставить целое слово, содержащее специальные символы? - PullRequest
0 голосов
/ 23 сентября 2018

У меня есть слова, чтобы соответствовать, используя только один шаблон.Критериями являются следующие:

  • содержит число или знак подчеркивания в первой букве, ИЛИ

  • хотя бы один специальный символ(исключая подчеркивание) в слове:

Должно совпадать

3testData
3test_Data
_testData
_test3Data
%data%
test%BIN%data
te$t&$#@daTa

НЕ должно совпадать

test_Data3

До сих пор мне удавалось сопоставить некоторые из них с помощью:

[\p{^Alpha}]\S+

За исключением слов, в которых внутри слова есть специальные символы

3testData
3test_Data
_testData
_test3Data
% данных%
тест % BIN% данных
тест % BIN% данных
te $ t & $ # @ daTa

Ответы [ 2 ]

0 голосов
/ 23 сентября 2018

Если поддерживаются видоискатели, вы можете использовать чередование , чтобы совпадать либо с подчеркиванием, либо с цифрой ИЛИ в другом случае совпадение с нулем или более раз, а не с пробелом, по крайней мере специальный символ, использующийкласс символов с последующим совпадением ноль или более раз, а не символ пробела.

(?<=\s|^)(?:[\d_]\S+|\S*[%@#$]\S*)(?=\s|$)

Regex demo

Объяснение

  • (?<=\s|^) Позитивный взгляд за утверждением того, что слева является либо пробелом, либо началом строки
  • (?: Начало группы без захвата
    • [\d_]\S+ Совпадение с цифрой или подчеркиванием с последующим совпадением один или несколько раз, а не пробел
    • | Или
    • \S*[%@#$]\S* Совпадение ноль или более раз не пробелсимвол, за которым следует соответствие тому, что указано в классе символов, и совпадение ноль или более раз не является символом пробела снова
  • ) Закрыть не захватывая group
  • (?=\s|$) Позитивный взгляд, чтобы утверждать, что ниже следует пробельный символ или конец строки
0 голосов
/ 23 сентября 2018

если я правильно понял вопрос, вы ищете начальный% и конечный% в строке.Предполагая, что есть только одна возможная строка, вы можете использовать indexOf и lastIndexOf в виде

function searchTagIn(symbol, str){ let chk=str.indexOf(symbol);
 if(  chk>-1){
  if(str.lastIndexOf(symbol)!=chk){
   return str.substring(chk,str.lastIndexOf(symbol);
  }
 }return;
}
...