Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 12.07.2013, 18:21
Профессор
Отправить личное сообщение для lancer Посмотреть профиль Найти все сообщения от lancer
 
Регистрация: 30.01.2008
Сообщений: 230

Такое regExp
Перечитал здесь все про регулярные выражения, но так и не понял с какой стороны подойти к следующей задаче чтобы не наплодить тонну кода.

Дано: произвольная строка.
Искомое совпадение: символы A, B, C присутствующие одновременно.

А и B я еще найти могу.
a = "qwertyqwerBtCyA";
a_reg = /A.*?B|B.*?A/i;


Но если в искомые добавить C, то прийдется таких "или" плодить 8 штук.

Для проверки последовательности (C)A(C)B.
a_reg = /CA.*?B|AC.*?B|C.*?A.*?B|A.*?C.*?B/i;

Для части (C)B(C)A будет почти тоже.

Казалось бы сошло как никак для трех букв. А если их 8, то решение будет явно громоздкое.
Ответить с цитированием
  #2 (permalink)  
Старый 12.07.2013, 18:26
Профессор
Отправить личное сообщение для mta88 Посмотреть профиль Найти все сообщения от mta88
 
Регистрация: 16.05.2013
Сообщений: 229

так регулярные выражения не всесильны
а главное при увеличении размера становятся нечитаемы
а для вашей задачи проверки вхождения букв я бы использовал indexOf уже с количества букв равного 1 (один, да с одной буквы)
Ответить с цитированием
  #3 (permalink)  
Старый 12.07.2013, 20:21
Аспирант
Отправить личное сообщение для edison Посмотреть профиль Найти все сообщения от edison
 
Регистрация: 01.04.2013
Сообщений: 58

У вас пример высосанный из пальца и соответсвтенно решение его тоже высосано из пальца, т.е. решается такое совсем не регулярками.
Никто не мешает сделать 2,3 - 10 регулярок и проверять
a_reg1 = /C/;
a_reg2 = /B/;
a_reg3 = /A/;

if(a_reg1&&a_reg2&&a_reg3) - упростил конечно, но думаю смысл понятен

Опять же пример высосан из пальца и он не решается регекспами.
Ответить с цитированием
  #4 (permalink)  
Старый 12.07.2013, 21:55
Аватар для pikko
Аспирант
Отправить личное сообщение для pikko Посмотреть профиль Найти все сообщения от pikko
 
Регистрация: 06.10.2012
Сообщений: 60

var s = 'qwertyqwerBtCyA';

function miracle ( s, r ) {
    for (var i = r.length; i;) if (!r[--i].test(s)) return false;
    return true;
}

alert(  miracle( s, [ /A/, /B/, /C/ ] ) );
Ответить с цитированием
  #5 (permalink)  
Старый 13.07.2013, 07:02
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

http://javascript.ru/basic/regular-e...n#obekt-regexp

function allSumb_test(str){
  var arr = ['A','B','C','D'];
  for(var i=0;i<arr.length; i++) {
    var re = new RegExp(arr[i], "i");
    if(!re.test(str))   return false;    
  }
    return true;
}
var str = "qwertyqwerBtCyAsdfsd"; //Тест со всеми в массиве;
alert(allSumb_test(str))

var str = "qwertyqwerBtCyAs"; //Тест без D/d
alert(allSumb_test(str))


Или

function allSumb_test(str){
  var arr = 'ABCD'.split('');
  for(var i=0;i<arr.length; i++) {
    if(str.indexOf(arr[i])==-1 && str.indexOf(arr[i].toLowerCase())==-1)   return false;    
  }
  return true;
}
var str = "qwertyqwerBtCyAsdfsd"; //Тест со всеми в массиве;
alert(allSumb_test(str))

var str = "qwertyqwerBtCyAs"; //Тест без D/d
alert(allSumb_test(str))

Последний раз редактировалось Deff, 13.07.2013 в 07:41.
Ответить с цитированием
  #6 (permalink)  
Старый 14.07.2013, 07:57
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,587

Ну если очень захотеть - можно поизвращаться :
alert(

/([ABC]).*(?!\1)([ABC]).*(?!\1|\2)[ABC]/

.test(prompt('test string', '4 B 5345 A dfdf  #$@% C fdhd')))
__________________
29375, 35

Последний раз редактировалось Aetae, 14.07.2013 в 08:04.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Что такое "шаблоны"? jsuse Серверные языки и технологии 5 11.07.2012 08:22
Как сделать такое fancy menu uonax Элементы интерфейса 2 22.05.2010 12:52
мааленький вопрос по Regexp:) mirniy Общие вопросы Javascript 1 22.01.2009 20:47
RegExp & Mozilla (быстродействие) tau Общие вопросы Javascript 9 24.11.2008 16:35
RegExp и unicode Yury900 Общие вопросы Javascript 7 13.05.2008 00:19