如何使用Javascript正则表达式搜索csv字符串并返回匹配项

如何使用Javascript正则表达式搜索csv字符串并返回匹配项,javascript,regex,csv,Javascript,Regex,Csv,我试图从匹配模式的分号分隔字符串中提取第一个用户权限 用户权限以以下格式存储: 拉拉;拉乌1号;LA_2;勒乌3 如果用户没有任何权限,则字符串为空 到目前为止,我的最佳解决方案是在regex.replace语句中使用以下正则表达式: .*?;LA_uu[^;]** 组末尾的问号用于匹配整行,以防用户没有权限,并将其替换为空字符串以表示她没有权限 但是,如果搜索的权限位于第一个位置,则它无法正常工作: 拉乌1号;LA_2;勒乌3 在正则表达式替换之前,只需在行的开头添加一个分号就可以很容易地解决

我试图从匹配模式的分号分隔字符串中提取第一个用户权限

用户权限以以下格式存储: 拉拉;拉乌1号;LA_2;勒乌3

如果用户没有任何权限,则字符串为空

到目前为止,我的最佳解决方案是在regex.replace语句中使用以下正则表达式: .*?;LA_uu[^;]**

组末尾的问号用于匹配整行,以防用户没有权限,并将其替换为空字符串以表示她没有权限

但是,如果搜索的权限位于第一个位置,则它无法正常工作: 拉乌1号;LA_2;勒乌3

在正则表达式替换之前,只需在行的开头添加一个分号就可以很容易地解决这个问题,但我的问题是,为什么下面的正则表达式不匹配它

*?:^|;LA_uu[^;]**


我尝试了许多其他正则表达式来找到解决方案,但迄今为止没有成功。

您可以先拆分字符串:

function getFirstRight(rights)
{
    return rights.split(";",1)[0] || "";
}

我不确定我是否正确回答了你的问题,但是关于你正在使用的正则表达式,你没有明确的理由使它们过于复杂,至少对我来说不是这样。您可能需要以下内容:

function getFirstRight(rights) {
  var m = rights.match(/(^|;)(LA_[^;]*)/)
  return m ? m[2] : "";
}

要回答以下正则表达式为什么不匹配的具体问题,一个问题是在开始时混合了这两种情况:

.*?
最后是:

^|;
这可能类似于说,跳过任何额外的字符,直到到达开始或分号。但是你不能跳过任何内容,然后再回到开头,除非它包含多行字符串中的换行符

类似这样的工作原理:

.*?(\bLA_[^;]).*

意思是,跳过字符,直到单词边界后跟LA_.

对不起,在您回答之前,权限和regexp的格式不正确。在LAA的情况下;拉乌1号;LA_2;勒乌3;它返回LAA,但正确的是LAU 1。谢谢!不知何故,我忽略了匹配函数,我的简易解决方案仍然有一个bug我将您的想法移植到actionscript3中,现在它的形式如下:`public function getRole:String{return/^ lau[^;]*/.testthis.\u rightsList?this.\u rightsList.match/^;lau[^;]*/[2]:}`谢谢您的回答。Somewhy.*?\bLA_u[^;]*?.*仍然不匹配。。最后的问号用于匹配零次或一次出现。如果我删除它,那么它正好匹配一个事件。我用match函数解决了我的问题,但我仍然想理解为什么最后一个正则表达式不匹配。看起来你的评论中有一个额外的正则表达式。不确定在您尝试在代码中使用它之前,它是否已经存在,或者最初是否有其他东西给您带来了问题。但不管怎样,我只是仔细检查了一下,它似乎工作了,两个字符串,还有替换和匹配:var reg=/.?\bLA_[^;].*/var s1='LAA;拉乌1号;LA_2;勒乌3;var s2='LA_1;LA_2;勒乌3;alerts1.replacereg,“1美元”;alerts2.replacereg,'1';alerts1.matchreg[1];alerts2.matchreg[1];