Что для меня работало, так это создать модель представления, содержащую свойство date в виде строки. Присвоение свойства DateTime из модели домена и вызов .ToString () в свойстве date при назначении значения в viewmodel.
Результат JSON из метода действия MVC вернет дату в формате, совместимом с представлением.
public class TransactionsViewModel {public string DateInitiated {get; задавать; } public string DateCompleted {get; задавать; }}
public class Transaction {public DateTime? DateInitiated {get; set;} public DateTime? DateCompleted {get; set;}}
public JsonResult GetTransactions () {var transaction = _transactionsRepository.All; var model = new List & lt; TransactionsViewModel & gt; (); foreach (транзакция var в транзакциях) {var item = new TransactionsViewModel {............... DateInitiated = transaction.DateInitiated.ToString (), DateCompleted = transaction.DateCompleted.ToString (),} ; model.Add (пункт); } return Json (модель, JsonRequestBehavior.AllowGet); }
(\d+)\s+(\(.*?\))?\s?Z
Обратите внимание на скошенные скобки, а? (ноль или один раз). Любая из групп, которые вы не хотите захватывать, может быть (?: Группы без захвата).
Я согласен с пробелами. \ s - лучший вариант. Я также изменил квантификатор, чтобы обеспечить наличие цифр в начале. Что касается новых строк, это будет зависеть от контекста: если файл анализируется по строкам, это не будет проблемой. Другим вариантом является привязка начала и конца строки (добавьте a ^ вперед и $ в конце).
Вот пример проверки подлинности электронной почты, чтобы получить наиболее значимую часть текста, используя ()?
'email@com.ua'.match(/[a-z-_.]+(@([a-z]+(\.([a-z]+)?)?)?)?/g) # => ['email@com.ua']
. Например, если предыдущее совпадение не было найдено, оно будет соответствовать следующей до пустой строки или появляются неправильные символы
// ['eamil@com.ua']
// ['email@com.']
// ['email@com']
// ['email@']
// ['email']
Вы можете сделать это:
([0-9]+) (\([^)]+\))? Z
Однако это не будет работать с вложенными парами для Y. Вложенность требует рекурсии, которая не является строго регулярной (но не контекстной). Современные regexp-двигатели все еще могут справиться с этим, хотя и с некоторыми трудностями (обратные ссылки).
Если все, что вам нужно для захвата, это число, и число появляется в начале строки, вы можете просто использовать gg] jQuery для PHP типа , чтобы сделать эту тяжелую работу очень быстро и чрезвычайно эффективно:
$value = "10 Z";
$value = "20 (foo) Z";
$value = "30 (bar) Z";
$value = "Cheese";
$value = " 40 (flat) Z";
$value = "22(456)";
$X = (int)trim($value);
Выходы:
$ x = 10 $ x = 20 $ x = 30 $ x = 0 $ x = 40 $ x = 22
BLOCKQUOTE>
Это должно работать:
^\d+\s?(\([^\)]+\)\s?)?Z$
Не проверял его, но позвольте мне дать вам разбивку, поэтому, если есть какие-то ошибки, они должны быть довольно просто найти:
Сначала начало:
^ = beginning of string
\d+ = one or more decimal characters
\s? = one optional whitespace
Затем эта часть:
(\([^\)]+\)\s?)?
На самом деле:
(.............)?
Что делает следующее содержимое необязательно, только если оно существует полностью
\([^\)]+\)\s?
\( = an opening bracket
[^\)]+ = a series of at least one character that is not a closing bracket
\) = followed by a closing bracket
\s? = followed by one optional whitespace
И конец состоит из
Z$
Где
Z = your constant string
$ = the end of the string