2013-10-27 3 views
1

У меня есть это в моей JavaScript,JavaScript Regex Производство Uncaught SyntaxError: Неожиданный токен НЕЗАКОННО

alert(words.match(\b.(\w*)\b)); 

, где words является строкой определено ранее. Но регулярное выражение (\b.(\w*)\b) создает консольную ошибку Uncaught SyntaxError: Unexpected token ILLEGAL. Я думаю, что это обратная косая черта, но независимо от того, что я делаю, у меня все еще проблема. Я тщательно исследовал эту проблему в Stackoverflow и Google, но ни один из результатов не работает или не соответствует моей ситуации.

Это регулярное выражение, которое я использую: http://regexr.com?36u4v. Любое из проведенных было бы весьма признателен.

+0

Почему мой вопрос был отклонен? –

ответ

3

Это сводится к «\b.(\w*)\bRegExp?» Ну, вроде, но у вас нет сказал переводчик, который. Это не REGExp литерал в JavaScript. Вам нужно либо передать его в качестве строки в RegExp конструктор, или использовать буквальную нотацию, которая начинается и заканчивается /

/\b.(\w*)\b/ 

Что касается вашей ошибки, интерпретатор достигает \ первыми и не знает, что это значит, поэтому он говорит вам, что токен (\) был неожиданным, так что это «незаконно», где вы его использовали.


Для нескольких матчей, вам нужно установить флаг в g ЛОБАЛЬНЫЕ, например, чтобы найти "Foo" несколько раз

/foo/g 

does this regex work well for selecting all words, excluding spaces and punctuation (other than underscores and hyphens)

\w является shorthand для class [A-Za-z0-9_], поэтому вы не соответствуете дефисам на данный момент. Ваш . также будет соответствовать большинству символов, включая пробелы и знаки препинания. Вы можете поменять * (ноль или больше) на + (один или несколько), так что вам не нужен .. Поэтому нижеследующий может быть более подходящими для ваших нужд

/\b([A-Za-z0-9_-]+)\b/g 
+0

Хорошо, хорошо, что исправляет проблему, с приятным объяснением. Но теперь я столкнулся с другим. Это регулярное выражение должно было выбрать все слова, исключая пробелы и знаки пунктуации (кроме подчеркиваний и дефис), но теперь это не так. В regexr он показывал, что он работает хорошо, но теперь это не так. –

+1

Помните, что '.' будет соответствовать почти любому, и если вам нужно несколько находок, вам нужно установить флаг' g'lobal. –

+0

Спасибо. Кажется, это исправить. –

1

Вы забыли поставить регулярное выражение буквального в косую черту:

alert(words.match(/\b.(\w*)\b/)); 
Смежные вопросы