Регулярные выражения: есть оператор AND?

Вы можете сделать несколько вещей для повышения производительности:

  1. ваша переменная строк становится все больше и больше, поэтому не храните html в одной переменной. решением может быть функция $.each() и каждая функция, которую вы добавляете в DOM. Но это незначительная корректировка.
  2. Генерация Html хороша, но вы можете попробовать создать и добавить DOM. Как $('<tr></tr>').
  3. И, наконец, это решит вашу проблему наверняка: используйте несколько вызовов ajax в первом вызове ajax, чтобы собрать, сколько данных доступно, и получить около 1000 или может быть больше данных. И используйте другие вызовы для сбора оставшихся данных. Если вы хотите, вы можете использовать синхронный вызов или асинхронные вызовы с умом.

Но старайтесь избегать сохранения значения. Размер DOM будет огромным, но он должен работать на модерирующих браузерах и забыть об IE6.

@ fuel37: Пример

function outputDocumentNew(data, doc_id) {
    //Variable DOM's
    var rowSample = $('<tr></tr>').addClass('row-class');
    var colSample = $('<td></td>').addClass('col-class');
    var spanSample = $('<span></span>').addClass('span-class');
    var inputButtonSample = $('<input type="button"/>').addClass('input-class');

    //DOM Container 
    var container = $('#documentRows');
    container.empty().append('<table></table>');

    //Static part
    var head = '<thead>\
                <tr>\
                    <th width="1%" align="center">ID</th>\
                    <th width="1%" align="center">Status</th>\
                    <th width="70%">Name</th>\
                    <th width="2%">Actions</th>\
                    <th width="1%">Origin</th>\
                </tr>\
                </thead>';
    container.append(head);

    var body = $('<tbody></tbody>');
    container.append(body);

    //Dynamic part
    $.each(data, function (index, value) {
        var _this = this;

        //DOM Manupulation
        var row = rowSample.clone();

        //Actions
        var inpFailOne = inputButtonSample.clone().val('F').attr('rev', _this.id).addClass('failOne').click(function (e) {
            //do something when click the button.
        });
        var inpPromoteOne = inputButtonSample.clone().val('P').attr('rev', _this.id).addClass('promoteOne').click(function (e) {
            //do something when click the button.
        });

        row
        .append(colSample.clone().append(_this.id))
        .append(colSample.clone().append(spanSample.colne().addClass('status').append(_this.status)))
        .append(colSample.clone().append(spanSample.colne().addClass('name').append(_this.name)))
        .append(colSample.clone().append(inpFailOne).append(inpPromoteOne))
        .append(colSample.clone().append(_this.origin));

        body.append(row);
    });
}

в этом процессе вам необходимо создать & amp; поддерживать id или классы для манипуляций. У вас есть элемент управления для привязки событий и управления ими.

625
задан vijrox 3 August 2017 в 19:43
поделиться

6 ответов

Используйте регулярное выражение непотребления.

типичное (т.е. Perl/Java) нотация:

(?= expr)

Это означает "соответствие expr, но после этого продолжите соответствовать в исходном матч-пойнте".

можно сделать столько из них, сколько Вы хотите, и это будет "и". Пример:

(?=match this expression)(?=match this too)(?=oh, and this)

можно даже добавить группы получения в выражениях непотребления, если необходимо сохранить некоторые данные там.

350
ответ дан Jason Cohen 3 August 2017 в 19:43
поделиться
  • 1
    Doesn' t, которые только работают, при попытке присвоить один тип другому? It' s неявный бросок, в конце концов. Я don' t думают, что это помогло бы, если бы Вы хотели присвоиться Number к Number. – Drew Noakes 5 June 2010 в 06:51

Необходимо использовать предвидение, как некоторые из других респондентов сказали, но предвидение должно составлять другие символы между своим выходным словом и текущим положением соответствия. Например:

(?=.*word1)(?=.*word2)(?=.*word3)

.* в первом предвидении позволяет ему соответствовать однако многим символам, в которых требуется к тому, прежде чем это доберется до "word1". Тогда положение соответствия сбрасывается, и второе предвидение ищет "word2". Сброс снова и заключительная часть соответствуют "word3"; так как это - последнее слово, на которое Вы проверяете, не необходимо, чтобы это было в предвидении, но это не причиняет боль.

для соответствия целому абзацу, необходимо привязать regex в обоих концах и добавить финал .* для потребления оставшихся символов. Используя нотацию стиля Perl, которая была бы:

/^(?=.*word1)(?=.*word2)(?=.*word3).*$/m

'm' модификатор для multline режима; это позволяет ^, и $ соответствие на границах абзаца ("границы строки" в regex-говорят). Важно в этом случае, чтобы Вы не использовали' модификатор, который позволяет точечному метасимволу соответствовать новым строкам, а также всем другим символам.

Наконец, Вы хотите удостовериться, что Вы распознаете целые слова и не только фрагменты более длительных слов, таким образом, необходимо добавить границы слова:

/^(?=.*\bword1\b)(?=.*\bword2\b)(?=.*\bword3\b).*$/m
308
ответ дан Alan Moore 3 August 2017 в 19:43
поделиться
  • 1
    @Jonathan Wood - Это было точно, что я искал! Очень ценивший! – Steven Magana-Zook 10 June 2011 в 23:45

Можно сделать это с регулярным выражением, но вероятно Вы еще захотите некоторым. Например, используйте несколько regexp и объедините их в выражении if.

можно перечислить все возможные перестановки со стандартом regexp, как это (соответствует a, b и c в любом порядке):

(abc)|(bca)|(acb)|(bac)|(cab)|(cba)

Однако это делает очень длинное и вероятно неэффективный regexp, если у Вас есть больше, чем условия пары.

, Если Вы используете, некоторые расширили regexp версию, как Perl или Java, у них есть лучшие способы сделать это. Другие ответы предложили использовать положительную предварительную операцию.

27
ответ дан Juha Syrjälä 3 August 2017 в 19:43
поделиться
  • 1
    @Nilzor, в таком случае, Вы получаете копию значения, как Вы говорите, но OP хочет управлять тем процессом так или иначе с их собственным кодом. Я don' t думают that' s возможный, если you' ре, адаптирующееся между двумя типами. Так it' s немного отличающийся к тому, что можно сделать в C++. – Drew Noakes 3 August 2011 в 11:44

Не возможно в Вашем случае сделать И на нескольких результатах соответствия? в псевдокоде

regexp_match(pattern1, data) && regexp_match(pattern2, data) && ...
10
ответ дан user54579 3 August 2017 в 19:43
поделиться
  • 1
    Описание почему это doesn' t работа пятно - на. Поскольку Вы предполагаете, тем не менее, что идея свойства Self не так хороша, – Charlie 15 November 2008 в 16:09

При использовании регулярных выражений Perl можно использовать положительное предвидение:

, Например

(?=[1-9][0-9]{2})[0-9]*[05]\b

были бы числа, больше, чем 100 и делимый 5

8
ответ дан jpalecek 3 August 2017 в 19:43
поделиться
  • 1
    @MickyDuncan А.. это совершенно корректно. Что Вы думаете, содержание a и b - то, если они - указатели? В каком смысле делает " только копируя pointer" отличайтесь от " копирование content" когда содержание ЯВЛЯЕТСЯ указателем? – The Dag 6 November 2012 в 10:32

Порядок всегда подразумевается в структуре регулярного выражения. Для выполнения, что Вы хотите необходимо будет соответствовать входной строке многократно против различных выражений.

то, Что Вы хотите сделать, не возможно с единственным regexp.

2
ответ дан pilif 3 August 2017 в 19:43
поделиться
  • 1
    " неявное ключевое слово используется для объявления неявного пользовательского оператора преобразования типов. Используйте его для включения неявных преобразований между пользовательским типом и другим типом..." - MSDN – MickyD 22 February 2012 в 09:50
Другие вопросы по тегам:

Похожие вопросы: