我正在尝试从与分号匹配的分号分隔字符串中提取第一个用户权限。

用户权限以以下格式存储:     <代码> LAA; LA_1; LA_2; LE_3;

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

到目前为止,我最好的解决方案是在regex.replace语句中使用以下正则表达式:   <代码> * ?;(LA _ [^] *)?*

(组末尾的问号是为了匹配整行,以防用户没有权利,并用空字符串替换它以表明她没有它。)

但是,如果搜索到的权限位于第一个位置,它将无法正常工作:   <代码> LA_1; LA_2; LE_3;

通过在正则表达式替换之前在行的开头添加分号很容易修复它,但我的问题是,为什么以下正则表达式不匹配呢?

<代码> *(:(:?^ |)(LA _ [^] *))。?。*

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

有帮助吗?

解决方案

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

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

其他提示

你可以先拆分字符串:

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

要回答具体问题“为什么以下的正则表达不匹配?”,一个问题是开头的混合:

.*?

最终紧接着:

^|;

可能就像说,跳过任何多余的字符,直到你到达开头或分号。但你不能跳过任何东西然后到达开头(除非它涉及多行字符串中的换行符)。

这样的工作:

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

含义,跳过字符,直到单词边界后跟“LA_”。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top