Регулярное выражение
Добрый день.
Возникла проблема при написании регулярного выражения. Регулярное выражение должно находить квадратные скобки в строке, если внутри них есть любое кол-во любых символов, кроме букв. С этим проблем не возникло, получилось следующее выражение /^(\[(?:[^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,})) )? \]) но оно не даёт нужного результата. Помогите модифицировать чтобы подходило по требованиям. Заранее спасибо. |
FoxTrix,
а кусок HTML можно с того что выборку делаете ? |
Цитата:
?.}]]’]-@_|% (:.]/:!\.$"# _[$]~+"|%\’: <>.>,?_>%$$= {}_;("<_)(|: |
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> |
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> |
Mess4me,
Только так как вы написали, будет неверные результаты теста выводить, т.к. http://javascript.ru/forum/270058-post3.html Сейчас тестировал, столкнулся с этой проблемой =) |
FoxTrix,
интересно поведение ) наверное в Вашем варианте лучше сделать это в два этапа. Получить результат (всё кроме букв) , применить новый рег к результату с точками. И не мучатся) |
Mess4me,
Да, видимо придется написать как-то так matches = /^(\[(?:[^A-Za-z]+)?\])/g.exec('[....]#$%%'); if(matches != null && !/\.{4,}/g.test(matches[0])) { } Спасибо за помощь =) |
Цитата:
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)) правда, не знаю как это скажется на производительности. |
Часовой пояс GMT +3, время: 00:26. |