在Javascript中提取子字符串的更简单方法

在Javascript中提取子字符串的更简单方法,javascript,regex,Javascript,Regex,我试图从Javascript中的字符串中提取与给定模式匹配的子字符串。 例如: 有没有更简单的方法来实现这一点?最好是单衬里?嗯,这已经非常接近单衬里了。您可以将“if”块简化为以下内容: if(match){ category = match[0]; } 分类前是否应该有一个\b 如果匹配失败,您可以通过提供一个空数组来缩短它 category = (classProp.match(/category_[a-z]+\b/) || [""])[0]; 那么: try { var cat

我试图从Javascript中的字符串中提取与给定模式匹配的子字符串。 例如:


有没有更简单的方法来实现这一点?最好是单衬里?

嗯,这已经非常接近单衬里了。您可以将“if”块简化为以下内容:

if(match){
  category = match[0];
}

分类前是否应该有一个
\b
如果匹配失败,您可以通过提供一个空数组来缩短它

 category = (classProp.match(/category_[a-z]+\b/) || [""])[0];
那么:

try { var category = 'active category_games'.match(/category_[a-z]+\b/).pop(); } catch(e) {}

如果你真的想要一行:

var category = (classProp.match(/category_[a-z]+\b/) || "")[0] || undefined;

但我建议您使用@ziesemer的答案。

是的,但我希望不必使用匹配变量。我总是愚蠢地给它命名,比如“tmp”之类的:(打高尔夫球可能是一个有趣的练习,但到目前为止已经给出了答案(一个额外的数组实例化,一个try/catch子句)我认为这不值得。在try/catch块中实例化变量不是有一些问题吗?我认为这可能会导致旧IE版本中的内存泄漏。@Jørgen个人认为旧IE不值得担心,但通过添加
finally{category=null}可以轻松克服
在try/catch之后。实际上,在最后跳过\b不是更正确吗?因为我不希望\b包含在匹配中,尽管这不会是一个问题。写
(…| |[null])不是更等同于OP吗?很可能,我只是使用“”作为有效类别的“空”实现
var category = (classProp.match(/category_[a-z]+\b/) || "")[0] || undefined;