2009-01-07 4 views
1

У меня есть этот образец текста, который извлекается из имени класса на HTML элемент:Помощь с регулярным выражением в JavaScript

rich-message err-test1 erroractive 
rich-message err-test2 erroractive 
rich-message erroractive err-test1 
err-test2 rich-message erroractive 

Я пытаюсь соответствовать «test1»/«test2» данных в каждом из эти примеры. В настоящее время я использую следующее регулярное выражение, которое соответствует типу слова «err-test1». Я не могу понять, как ограничить его только данными после дефиса (-).

/err-(\S*)/ig 

Голова болит от удара по стене.

ответ

3

Из того, что я читаю, ваш код уже работает.

Regex.exec() возвращает массив результатов по успеху.

Первый элемент в массиве (индекс 0) возвращает всю строку, после чего в этот массив помещаются все закрытые элементы ().

var string = 'rich-message err-test1 erroractive'; 
var regex = new RegExp('err-(\S*)', 'ig'); 
var result = regex.exec(string); 

alert(result[0]) --> returns err-test1 
alert(result[1]) --> returns test1 
+0

Кровавый ад, я идиот. Я использовал .match() вместо .exec(). Спасибо! – Geuis

0

Вы можете попробовать 'err - ([^ \ n \ r] *)' - но уверены ли вы, что это проблема в регулярном выражении? Вы используете весь результат, а не только первый захват?

+0

Единственный бит, который мне нужен, это текст после «err-». Я хотел бы сделать соответствие чисто в одном выражении регулярного выражения вместо того, чтобы соответствовать всему слову, а затем удалить «err-» с помощью дополнительного метода. Несомненно, это сэкономит время, но все еще не устраняет проблему. – Geuis

0

Материал после - должен находиться в массиве результатов. Первым элементом является весь соответствующий текст (например, «err-test1»), а следующие элементы - совпадения из скобок захвата (например, «test1»).

myregex = /err-(\S*)/ig; 
mymatch = myregex.exec("data with matches in it"); 
testnum = mymatch[1]; 

Адрес reference site.