Регулярные выражения вытаскивание по шаблону
Имеется строка к примеру вот такая
var str = "Number of tube((13 Hi all people * _ +)) Number of tube((HI AKK))"; 1. Необходимо вытащить данные которые содержаться в круглых двойных скобках 2. Почему если в шаблоне содержится кириллица то при нахождении результата по шаблону вылазят какие-то кракозябры а не русские буквы ? Это не применительно к этому примеру а вообще ? Сильно не пинайте, только начал изучение регулярных выражений ... Я делаю вот так но не получается var reg = /Number of tube\(*(.*)\)*/; var str = "Number of tube((13 Hi all people * _ +)) Number of tube((HI AKK))"; var arr=reg.exec(str); document.write(arr); |
var reg = /\(+(.*?)\)+/g; var str = "Number of tube((13 Hi all people * _ +)) Number of tube((HI AKK))"; var arr=str.match(reg); alert(arr); только потом сделать реплейс каждому элементу (убрать скобки)... |
var str = "Number of tube((13 Hi all people * _ +)) Number of tube((HI AKK))"; alert(str.match(/([^\(\)]+)(?=\)+)/g)); Для нескольких результатов используйте match и флаг "g". Кстати, на сайте есть хорошая статья про регулярные выражения. |
Хорошо спасибо , а если мне важно знать вернее необходимо знать что находится перед двойными скобками ? Например в примере "Number of tube?" если строка например вида
var str = "Number of tube((13 Hi all people * _ +)) Number of tube((HI AKK)) Number of city((HI DEEP))"; И мне требуется найти то что находится между двойными скобками + перед двойными скобками должно стоять выражение Number of tube а по поводу второго вопроса могли бы помочь чем-нибудь ? Про проблему в кодировке ? |
ответ
var str = "Number of tube((13 Hi all people * _ +)) Number of tube((HI AKK)) Number of city((HI DEEP))"; alert(str.match(/Number of tube([^\(\)]+)(?=\)+)/g)); по поводу кодировки: проставлена ли кодировка на весь документ? |
ответ
хотелось бы взглянуть на содержимое, HTML+JS(если отдельно)
|
var str = "Number of tube13 Hi all people * _ +)) Number of tubeHI AKK))"; alert(str.match(/([^\(\)]+)(?=\)+)/g)); результат: Number of tube13 Hi all people * _ +,Number of tubeHI AKK |
Цитата:
|
Цитата:
|
var str = "1) Number of tube13(( Hi all people * _ +)) Number of tube((HI AKK))"; alert(str.match(/([^\(\)]+)(?=\)+)/g)); Результат - неверный :) |
Цитата:
|
Сделал вот так
var reg = /Number of tube\(+([^\(\)]+)\)+/g; var str = "1) Number of tube((13 Hi all people * _ +)) Number of tube((HI AKK)) Number of Kills ((Privet)) Number of tube((HI HOUSE))"; var arr=str.match(reg); alert(arr); Не могу понять почему резульатом служит Number of tube((13 Hi all people * _ +)),Number of tube((HI AKK)),Number of tube((HI HOUSE)) Ведь в круглых скобках стоит запомнить только то что находится в скобках ? Хочется чтобы результатом было - 13 Hi all people * _ +,HI AKK,HI HOUSE |
то что в скобках, вроде хранится в .$1, .$2 и т.д.
|
var reg = /Number of tube\(+[^\)\(]+\)+/g; var str = "1) Number of tube((13 Hi all people * _ +)) Number of tube((HI AKK)) Number of Kills ((Privet)) Number of tube((HI HOUSE))"; var arr=str.match(reg,'').join('').replace(/\)+/g,'').split(/Number of tube\(+/); alert(arr); |
Я написал код под конкретный заданный вопрос. Очевидно, что он будет работать, если условия менять.
|
Цитата:
Я сделал вот так как первый раз говорили var exam = ""; var reg = /Number of tube\(+([^\(\)]+)\)+/g; var str = "1) Number of tube((13 Hi all people * _ +)) Number of tube((HI AKK)) Number of Kills ((Privet)) Number of tube((HI HOUSE))"; var arr = str.match(reg); var mas = new Array(); for (var i=0; i<arr.length; i++) { mas[i]=arr[i].replace("Number of tube", ""); mas[i]=mas[i].replace("))", ""); mas[i]=mas[i].replace("((", ""); } alert(mas); Ну у меня сразу же вопрос появился ? Как измениться код если будет существовать переменная exam которая будет меняться и содержать в себе слово Number of tube, как сделать чтобы шаблон реагировал на переменную как на переменную, а не просто слово какое-то ,например var exam = "Number of tube"; var reg = "/" + exam + "\(+([^\(\)]+)\)+/g"; я просто синтаксис незнаю буду благодарен за помощь ... |
var reg = new RegExp(exam+'\\(+[^\\(\\)]+\\)+','g'); |
ZoNT,
А почему вот в этом случае: (?:Number of tube\(+)([^\)]+)(?=\)+) Первая non-capturing group все равно попадает в matches? |
потому что в match попадает вся подстрока из шаблона, а не выражение в скобках..
|
ZoNT,
Но (?=) работает ведь. |
почему (?= работает - вот в чём вопрос :)
|
(?= работает только в конце...
|
Цитата:
var s = '1) Number of tube((13 Hi all people * _ +)) Number of tube((HI AKK))', r = /Number of tube\(\((.*?)\)\)/g, a = []; while (r.exec(s)) { a[a.length] = RegExp.$1; } alert(a); |
ответ
var word = "Number of tube"; var number_of_skobka = 2; var str = "1) Number of tube((13 Hi all people * _ +)) Number of tube((HI AKK)) Number of Kills ((Privet)) Number of tube((HI HOUSE))"; var reg1 = new RegExp(word+"\\({"+number_of_skobka+"}[^\\)\\(]+(?=\\){"+number_of_skobka+"})","g"); var reg2 = new RegExp(word+"\\({"+number_of_skobka+"}"); alert(reg1.toString()); alert(reg2.toString()); var arr = str.match(reg1).join("").split(reg2); alert(arr); тока вот arr[0] будет всегда пустой и еще может кто подскажет почему в js в регулярных выражениях просмотр назад не работает? так бы можно было бы обойтись одной строкой str.match(/(?<=Number of tube\({2})[^\(\)]+(?=\){2})/g) |
ответ
только что заметил: в IE у переменной arr нет первого пустого элемента
|
Цитата:
Цитата:
|
ответ
Цитата:
|
Цитата:
|
Часовой пояс GMT +3, время: 02:17. |