使用正则表达式匹配或拆分查找特定字符串

时间:2011-07-28 13:45:46

标签: javascript regex match lookup

我有以下字符串:'user-status status-avail left top-pos'。
我想查找这个字符串,搜索'status-something',其中某些东西可以有不同的形式,比如'busy''not_busy'并返回这个特定的字符串。我该怎么写我的正则表达式,我应该使用拆分或匹配来执行此任务?

我试过了:

str.match(/status-([a-z]+)/);

但我明白了:

["status-avail", "avail"]作为回报,而不仅仅是'状态 - 利用'。

3 个答案:

答案 0 :(得分:1)

String.match()具有两种操作模式

字符串match()方法可以使用两种方式,重要的是要了解它返回的内容。如果设置'g' 全局标志,则该方法返回字符串中所有匹配项的数组,并且数组的每个元素都包含正则表达式的一个完整整体匹配项。但是,如果您不设置'g' 全局标志,则该方法仅查找字符串中的第一个匹配项,并返回包含该匹配项详细信息的数组。在这种情况下,第一个元素(matches[0])包含整体匹配,后续元素包含正则表达式中捕获组的内容(即matches[1]包含捕获组1的内容,{{1} }包含捕获组2的内容,依此类推。)

原帖中的正则表达式:(matches[2])没有设置/status-([a-z]+)/全局标志,因此它返回有关第一个匹配的详细信息。由于有一个捕获组,返回的数组有两个元素,第一个元素具有整体匹配,第二个元素具有第一个和唯一捕获组的内容。

如果添加全局标志,您将获得字符串中所有匹配项的数组:

'g'

或者,(正如其他abswers所说),你可以从正则表达式中删除捕获括号,在这种情况下,对str.match(/status-([a-z]+)/g);方法的调用将返回一个只包含一个元素的数组,这就是整个匹配:

match()

一旦你理解了这种行为,str.match(/status-[a-z]+/);非常有用。

答案 1 :(得分:0)

从正则表达式中删除括号。 (或者只是找到第一个项目)

答案 2 :(得分:0)

var matches=str.match(/status-[_a-zA-Z]+/);
if(matches[0])
     var statusSubstr=matches[0];

试试这个。来自您使用此类RegExp的oroginal帖子的something可能包含字母(忽略大小写)和“_”。 statusSubStr将包含您想要的内容。如果str=user-status status-avail left top-posstatusSubStr=status-avail。我希望它有用。