Регулярное выражение
Добрый день.
Возникла проблема при написании регулярного выражения. Регулярное выражение должно находить квадратные скобки в строке, если внутри них есть любое кол-во любых символов, кроме букв. С этим проблем не возникло, получилось следующее выражение
/^(\[(?:[^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, время: 11:15. |