Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 03.12.2015, 13:08
Аспирант
Отправить личное сообщение для FoxTrix Посмотреть профиль Найти все сообщения от FoxTrix
 
Регистрация: 27.07.2012
Сообщений: 73

Регулярное выражение
Добрый день.
Возникла проблема при написании регулярного выражения.

Регулярное выражение должно находить квадратные скобки в строке, если внутри них есть любое кол-во любых символов, кроме букв.

С этим проблем не возникло, получилось следующее выражение
/^(\[(?:[^A-Za-z]+)?\])/g.test('[test]%#$%^') // false


Но потребовалось, чтобы оно так же возвращало false, если внутри скобок находится 4 или больше точки
reg.text('[...]#$%%') // true
reg.text('[...#]#$%%') // true
reg.text('[....]#$%%') // false


попробовал что-то такого вида
^(\[((?:[^A-Za-z]+)|(?!([\.]{4,})))?\])

(в более читаемом виде)

^(\[
	(
		(?:[^A-Za-z]+) | (?!([\.]{4,}))
	)?
\])

но оно не даёт нужного результата.

Помогите модифицировать чтобы подходило по требованиям.
Заранее спасибо.
Ответить с цитированием
  #2 (permalink)  
Старый 03.12.2015, 13:22
Профессор
Отправить личное сообщение для Mess4me Посмотреть профиль Найти все сообщения от Mess4me
 
Регистрация: 03.11.2014
Сообщений: 263

FoxTrix,
а кусок HTML можно с того что выборку делаете ?
Ответить с цитированием
  #3 (permalink)  
Старый 03.12.2015, 14:06
Аспирант
Отправить личное сообщение для FoxTrix Посмотреть профиль Найти все сообщения от FoxTrix
 
Регистрация: 27.07.2012
Сообщений: 73

Сообщение от Mess4me Посмотреть сообщение
FoxTrix,
а кусок HTML можно с того что выборку делаете ?
Генерируемая строка заполненная спец символами, 12 символов длинной, для примера

?.}]]’]-@_|%
(:.]/:!\.$"#
_[$]~+"|%\’:
<>.>,?_>%$$=
{}_;("<_)(|:
Ответить с цитированием
  #4 (permalink)  
Старый 03.12.2015, 14:13
Профессор
Отправить личное сообщение для Mess4me Посмотреть профиль Найти все сообщения от Mess4me
 
Регистрация: 03.11.2014
Сообщений: 263

FoxTrix,
какой результат должен получиться?
<script>

    //Регулярное выражение должно находить квадратные скобки в строке, если внутри них есть любое кол-во любых символов, кроме букв.
     var reg = /^(\[(?:[^A-Za-z]+)?\])/g;
    console.log(reg.test('[test]%#$%^')); // ??
    console.log(reg.test('[...]#$%%') );// ??
    console.log(reg.test('[...#]#$%%')); // ??
    console.log(reg.test('[....]#$%%')); // ??

</script>
Ответить с цитированием
  #5 (permalink)  
Старый 03.12.2015, 14:15
Аспирант
Отправить личное сообщение для FoxTrix Посмотреть профиль Найти все сообщения от FoxTrix
 
Регистрация: 27.07.2012
Сообщений: 73

Mess4me,
<script>

    //Регулярное выражение должно находить квадратные скобки в строке, если внутри них есть любое кол-во любых символов, кроме букв.
     var reg = /^(\[((?:[^A-Za-z]+)|(?!(\.{4,})))?\])/g;
    console.log(reg.test('[test]%#$%^')); // false
    console.log(reg.test('[...]#$%%') );// true
    console.log(reg.test('[...#]#$%%')); // true
    console.log(reg.test('[....]#$%%')); // false

</script>
Ответить с цитированием
  #6 (permalink)  
Старый 03.12.2015, 15:04
Аспирант
Отправить личное сообщение для FoxTrix Посмотреть профиль Найти все сообщения от FoxTrix
 
Регистрация: 27.07.2012
Сообщений: 73

Mess4me,
Только так как вы написали, будет неверные результаты теста выводить, т.к.
Регулярное выражение и метод test

Сейчас тестировал, столкнулся с этой проблемой =)
Ответить с цитированием
  #7 (permalink)  
Старый 03.12.2015, 15:11
Профессор
Отправить личное сообщение для Mess4me Посмотреть профиль Найти все сообщения от Mess4me
 
Регистрация: 03.11.2014
Сообщений: 263

FoxTrix,
интересно поведение )
наверное в Вашем варианте лучше сделать это в два этапа.
Получить результат (всё кроме букв) , применить новый рег к результату с точками.
И не мучатся)
Ответить с цитированием
  #8 (permalink)  
Старый 03.12.2015, 15:43
Аспирант
Отправить личное сообщение для FoxTrix Посмотреть профиль Найти все сообщения от FoxTrix
 
Регистрация: 27.07.2012
Сообщений: 73

Mess4me,
Да, видимо придется написать как-то так
matches = /^(\[(?:[^A-Za-z]+)?\])/g.exec('[....]#$%%');
if(matches != null && !/\.{4,}/g.test(matches[0])) {
	
}


Спасибо за помощь =)

Последний раз редактировалось FoxTrix, 03.12.2015 в 18:13.
Ответить с цитированием
  #9 (permalink)  
Старый 03.12.2015, 15:57
Аспирант
Посмотреть профиль Найти все сообщения от pnpquest
 
Регистрация: 09.11.2015
Сообщений: 94

Сообщение от FoxTrix
Сейчас тестировал, столкнулся с этой проблемой =)
Помимо того способа, который по Вашей ссылке, сбрасывания lastIndex, можно перекомпилировать регулярку при каждом вызове

re = function(){ return /./g }

s = "."

console.log(re().test(s))
console.log(re().test(s))
console.log(re().test(s))

//или

console.log(/./g.test(s))
console.log(/./g.test(s))
console.log(/./g.test(s))

правда, не знаю как это скажется на производительности.

Последний раз редактировалось pnpquest, 03.12.2015 в 16:02.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Регулярное выражение tata4ka Общие вопросы Javascript 4 15.11.2014 00:56
Регулярное выражение и метод test tsigel Общие вопросы Javascript 3 30.08.2013 13:47
регулярное выражение literator Ваши сайты и скрипты 1 18.08.2013 18:24
Регулярное выражение: любой символ, включая перевод строки Gleb Общие вопросы Javascript 3 28.07.2011 12:15
регулярное выражение theo_ Общие вопросы Javascript 15 21.06.2010 10:29