соответствие регулярному выражению javascript ^[^#]?

Я ищу регулярное выражение в js, чтобы сопоставить строку, не начинающуюся с #, противоположную этой функции

   String.prototype.parseHashtag = function() {
        return this.match(/[#]+[A-Za-z0-9-_]+/g);
    }

    t="#lorem #ipsum yes no";
    console.log(t.parseHashtag()); // ["#lorem", "#ipsum"] 

Я нашел это Regex: поиск строк, которые не начинаются с X

но регулярное выражение не работает /([^#]|^)[a-z]/ или, может быть, я устал… Я делаю replace(), но мне действительно интересно понять, как это сделать в match()!

Вот js: http://jsfiddle.net/d8HVU/1/


person benoît    schedule 02.03.2012    source источник
comment
В чем именно заключается ваш вопрос? Какое регулярное выражение не работает?   -  person jfriend00    schedule 03.03.2012


Ответы (4)


Я попробовал это и хорошо работает для Javascript на вашем образце ввода. Я надеюсь, что это также нормально для других входных данных. Проверьте это хорошо. Другие ответы не сработали в Javascript.

String.prototype.parseHashtag = function() {
    return this.match(/(\s|^)[^#][\w\d-_]+\b/g);
}

t="#lorem #ipsum yes no";
alert(t.parseHashtag());
person jdehaan    schedule 02.03.2012
comment
+1, вероятно, вы правы, и это лучше всего соответствует тому, что хочет ОП. 2 маленькие вещи, он будет соответствовать пробелу перед словом (я думаю, что нет шансов избежать этого, потому что Javascript не поддерживает просмотр назад), во-вторых, нет необходимости в \d в charclass, он включен в \w. - person stema; 03.03.2012
comment
О, и важный момент: избегайте тире в классе символов или переместите его в конец, определяющий диапазон символов (возможно, это не нужно, потому что перед предопределенным классом, \d). - person stema; 03.03.2012
comment
(\s|^) Мне нужно выучить регулярное выражение… ^ для начала или «нет», когда оно находится в [] ? но не знаю, когда один с | (это ИЛИ?)… регулярное выражение — это новая судоку для веб-разработчиков… - person benoît; 03.03.2012
comment
Да все в порядке. | это или. Как сказала стема, возможно, вам также нужно избегать тире, я не эксперт по регулярным выражениям JS. Я пытался максимально сохранить исходное регулярное выражение. - person jdehaan; 03.03.2012

[^#].* 

Посмотрите, как это работает, на http://refiddle.com/1rj.

person Paul Alexander    schedule 02.03.2012

Если бы я пытался сопоставить последний хэш-тег и все символы, следующие за ним, я бы использовал это регулярное выражение:

/#[^#]*$/

Рабочая демонстрация: http://jsfiddle.net/jfriend00/nE2bM/

Если вы пытаетесь сделать что-то другое, пожалуйста, уточните, что именно вы просите.

person jfriend00    schedule 02.03.2012

Вы можете использовать отрицательный просмотр для этого

^(?!#).*

См. здесь, на Regexr.

Это соответствует каждой строке, которая не начинается с "#".

Хорошо, я не уверен, вы хотите сопоставить начало строки или своего рода «слово», которое не начинается с «#»?

person stema    schedule 02.03.2012