2009-01-07 107 views
1

我有这个样的文字,这是从类名检索的HTML元素:帮助与JavaScript的正则表达式

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

我想匹配“测试1” /“测试2”的数据在每个这些例子。我目前使用下面的正则表达式,它匹配“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 2009-01-07 19:17:22

0

你可以尝试'err - ([^ \ n \ r] *)' - 但是你确定这是正则表达式吗?你是否在使用整个结果,而不仅仅是第一次捕获?

+0

我唯一需要的是“err-”之后的文本。我想在一个正则表达式中干净地完成匹配,而不是匹配整个单词,然后使用额外的方法剥离“err-”。当然,现在可以节省时间,但仍不能解决问题。 – Geuis 2009-01-07 19:16:21

0

之后的东西 - 应该在结果数组中。第一项是所有匹配的文本(例如“err-test1”),而下一项是来自捕获括号的匹配项(例如“test1”)。

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

这是reference site