Такое 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, то решение будет явно громоздкое. |
так регулярные выражения не всесильны
а главное при увеличении размера становятся нечитаемы а для вашей задачи проверки вхождения букв я бы использовал indexOf уже с количества букв равного 1 (один, да с одной буквы) |
У вас пример высосанный из пальца и соответсвтенно решение его тоже высосано из пальца, т.е. решается такое совсем не регулярками.
Никто не мешает сделать 2,3 - 10 регулярок и проверять a_reg1 = /C/; a_reg2 = /B/; a_reg3 = /A/; if(a_reg1&&a_reg2&&a_reg3) - упростил конечно, но думаю смысл понятен Опять же пример высосан из пальца и он не решается регекспами. |
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/ ] ) ); |
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)) |
Ну если очень захотеть - можно поизвращаться :D :
alert( /([ABC]).*(?!\1)([ABC]).*(?!\1|\2)[ABC]/ .test(prompt('test string', '4 B 5345 A dfdf #$@% C fdhd'))) |
Часовой пояс GMT +3, время: 06:04. |