Как найти строку CSV и вернуть совпадение с помощью регулярного выражения Javascript - PullRequest
0 голосов
/ 30 июля 2009

Я пытаюсь извлечь первое пользовательское право из строки, разделенной точкой с запятой, которая соответствует шаблону.

Права пользователей хранятся в формате: LAA;LA_1;LA_2;LE_3;

Строка пуста, если у пользователя нет прав.

Мое лучшее решение на данный момент - использовать следующее выражение в выражении regex.replace: .*?;(LA_[^;]*)?.*

(Знак вопроса в конце группы предназначен для сопоставления всей строки в случае, если у пользователя нет прав, и замените его пустой строкой, чтобы указать, что у него его нет)

Однако, это не работает правильно, если искомое право находится на первой позиции: LA_1;LA_2;LE_3;

Это легко исправить, просто добавив точку с запятой в начале строки перед заменой регулярного выражения, но мой вопрос: почему следующее регулярное выражение не соответствует этому?

.*?(?:(?:^|;)(LA_[^;]*))?.*

Я пробовал множество других регулярных выражений, чтобы найти решение, но пока безуспешно.

Ответы [ 3 ]

0 голосов
/ 30 июля 2009

Я не уверен, что правильно понял ваш вопрос, но в отношении используемых вами регулярных выражений вы слишком усложняете их без какой-либо явной причины (по крайней мере, для меня). Вы можете захотеть что-то вроде:

function getFirstRight(rights) {
  var m = rights.match(/(^|;)(LA_[^;]*)/)
  return m ? m[2] : "";
}
0 голосов
/ 30 июля 2009

Чтобы ответить на конкретный вопрос «почему следующее регулярное выражение не соответствует ему?», Одной из проблем является сочетание этого в начале:

.*?

в итоге следует:

^|;

Что может быть похоже на высказывание: пропускайте лишние символы, пока не дойдете до начала или точки с запятой. Но вы не можете пропустить что-либо, а затем позже придете к началу (если только это не связано с переводом строки в многострочную строку).

Как-то так работает:

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

То есть пропускать символы до границы слова, за которой следует "LA _".

0 голосов
/ 30 июля 2009

Вы можете просто разбить строку сначала:

function getFirstRight(rights)
{
    return rights.split(";",1)[0] || "";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...