Захват шаблона без пробелов [дубликат]

  1. переменная примитивного типа, такая как строка, число всегда передается как пропуск по значению.
  2. Массив и объект передаются как проход по ссылке или передаются по значению на основе этих двух условий. если вы изменяете значение этого Объекта или массива с новым объектом или массивом, то оно передается по значению. object1 = {item: "car"}; array1=[1,2,3]; здесь вы назначаете новый объект или массив старым. Вы не меняете значение свойства старого объекта. Так что это пропуск по значению. если вы изменяете значение свойства объекта или массива, то оно передается по ссылке. object1.key1= "car"; array1[0]=9; здесь вы меняете значение свойства старого объекта. Вы не назначаете новый объект или массив старым. Также он передается по ссылке.

Код

    function passVar(object1, object2, number1) {

        object1.key1= "laptop";
        object2 = {
            key2: "computer"
        };
        number1 = number1 + 1;
    }

    var object1 = {
        key1: "car"
    };
    var object2 = {
        key2: "bike"
    };
    var number1 = 10;

    passVar(object1, object2, number1);
    console.log(object1.key1);
    console.log(object2.key2);
    console.log(number1);

Output: -
    laptop
    bike
    10
6
задан Tasawer Khan 11 June 2010 в 07:57
поделиться

3 ответа

Вы хотите что-то вроде этого: ( видеть его в действии на rubular.com ):

^\s*\S+\s*$

Объяснение:

  • ^ является началом привязки строки
  • $ является концом привязки строки
  • \s является символьным классом для пробелов
  • \S является отрицанием \s (обратите внимание на разницу в верхнем и нижнем регистре)
  • * является повторением «нуль или больше»
  • + является «одним

Ссылки


Может ли «текст» быть пустым?

Вышеупомянутый шаблон NOT , например, пустая строка. Исходная спецификация не очень ясна, если это предполагаемое поведение, но если пустым «текстом» разрешено, просто используйте вместо него \S*, т. Е. Сопоставьте ноль -или-больше (вместо one -or-more) повторение \S.

Таким образом, этот шаблон (такой же, как выше, кроме * используется вместо +)

^\s*\S*\s*$

будет соответствовать:

  • Пустая строка (т. е. строка, длина которой равна 0)
  • Непустые строки, состоящие только из пропущенных символов

Что считается «текстовыми» символами?

Вышеупомянутые шаблоны используют \S для определения символов «текст», т.е. ничего, кроме пробелов. Это включает в себя такие вещи, как пунктуации и символы, т. Е. Строка " #@^$^* " соответствует обоим шаблонам. Неясно, является ли это желаемым поведением, т. Е. Возможно, что " ==== AWESOMENESS ==== " является желаемым совпадением

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

Например, этот шаблон:

/^[^a-z]*[a-z]*[^a-z]*$/i

Будет соответствовать (, как показано на rubular.com ):

 ==== AWESOMENESS ====

Но не:

 ==== NOT AWESOME ==== 

Обратите внимание, что метасимвол ^, используемый в качестве символа первого в определении класса символов, больше не означает начало строкового якоря , а скорее отрицание определения класса символов.

Обратите также внимание на использование модификатора /i в шаблоне: это позволяет не учитывать регистр символов. Фактический синтаксис может варьироваться между языками / ароматами.

Ссылки

14
ответ дан polygenelubricants 23 August 2018 в 00:39
поделиться
  • 1
    +1, но см. Комментарий к собственному ответу Таза - пустая строка также должна быть сопоставлена. – Tim Pietzcker 11 June 2010 в 10:49
  • 2
    @Tim: рассматривается, среди прочих вопросов. – polygenelubricants 11 June 2010 в 14:28
  • 3
    +1, Спасибо за подробный ответ. Это очень полезно. – Tasawer Khan 11 June 2010 в 18:14
  • 4
    Здравствуй! Я пытаюсь использовать \S, поскольку у вас есть это здесь, чтобы предотвратить пробелы в моей проверке строки, но не долго. Не могли бы вы взглянуть сюда? [Д0] stackoverflow.com/questions/43764025/… – Leon Gaban 3 May 2017 в 15:20

Это должно сделать это:

^\s*\S+\s*$
  • " aaadadadad " => соответствует
  • " aaa aaaaa " => не соответствует
1
ответ дан Julien Hoarau 23 August 2018 в 00:39
поделиться

Просто нашел ответ сам. Поэтому я пишу это здесь, чтобы это могло быть полезно для кого-то другого. ^\s*\S*\s*$

2
ответ дан Tasawer Khan 23 August 2018 в 00:39
поделиться
  • 1
    Это только соответствует, если "текст" это только один символ, и за ним должен следовать символ пробела. Из (довольно неопределенной) спецификации я бы предположил, что вы хотите использовать * и + для всех трех частей. – polygenelubricants 11 June 2010 в 08:25
  • 2
    Извините * были там. Я думаю, что stackoverflow не отображает их (?). Так исправлено. – Tasawer Khan 11 June 2010 в 08:38
  • 3
    Это также соответствует пустой строке. Вы хотите, чтобы? Кроме того, скобки вокруг \S являются излишними. – Tim Pietzcker 11 June 2010 в 08:46
  • 4
    SO интерпретирует * как индикаторы для курсива и ** для жирного текста. Это одна из причин, по которой вам нужно окружать образцы кода обратными окнами (как и вы) или отступать их на 4 пробела. – Tim Pietzcker 11 June 2010 в 08:48
  • 5
    @Tim. В моем случае допустимы пустые строки. И удалил скобки :) – Tasawer Khan 11 June 2010 в 10:11
Другие вопросы по тегам:

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