我有以下字符串:'user-status status-avail left top-pos
'。
我想查找这个字符串,搜索'status-something',其中某些东西可以有不同的形式,比如'busy''not_busy'并返回这个特定的字符串。我该怎么写我的正则表达式,我应该使用拆分或匹配来执行此任务?
我试过了:
str.match(/status-([a-z]+)/);
但我明白了:
["status-avail", "avail"]
作为回报,而不仅仅是'状态 - 利用'。
答案 0 :(得分:1)
字符串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-pos
则statusSubStr=status-avail
。我希望它有用。