Используйте parseInt (...) , но убедитесь, что вы указали значение радиуса; в противном случае вы столкнетесь с несколькими ошибками (если строка начинается с «0», радиус - восьмеричный / 8 и т. д.).
var x = parseInt(stringValueX, 10);
var y = parseInt(stringValueY, 10);
alert(x + y);
Надеюсь, что это поможет!
Вам повезло, потому что C # - один из немногих языков (если не единственный), который поддерживает подвыражения, захватывает
https://msdn.microsoft.com/en-us/ library / system.text.regularexpressions.capture (v = vs.110)
API .NET можно посмотреть следующим образом
Matches
Groups (most regex engines stop here)
Captures (unique for .NET)
Непонятно от вашего вопроса, что вы хотите точно сопоставить, но это должно вас начать. Спросите еще раз, если вы застряли.
string input = "-group1 -group2 ";
string pattern = @"(-\S*\W){2}";
foreach (Match match in Regex.Matches(input, pattern))
{
Console.WriteLine("Match: {0}", match.Value);
for (int groupCtr = 0; groupCtr < match.Groups.Count; groupCtr++)
{
Group group = match.Groups[groupCtr];
Console.WriteLine(" Group {0}: {1}", groupCtr, group.Value);
for (int captureCtr = 0; captureCtr < group.Captures.Count; captureCtr++)
Console.WriteLine(" Capture {0}: {1}", captureCtr,
group.Captures[captureCtr].Value);
}
}
Это выводит
Match: -group1 -group2
Group 0: -group1 -group2
Capture 0: -group1 -group2
Group 1: -group2
Capture 0: -group1
Capture 1: -group2
Как вы можете видеть (группа 1, захват 0) и (группа 1, захват 1) предлагают отдельные записи группы (а не последние, как на большинстве языков)
Этот адрес я думаю о том, что вы называете «иметь возможность обратного выделения каждого из значений отдельно»
(Вы используете термин «backreference», но я не думаю, что вы правы для замены шаблона?)
Попробуйте следующее:
(-.+?)(\s|$)
Ваша первая группа захвата будет иметь то, что вы хотите (-group1
, -group2
и т. д.).
Если вы хотите больше контролировать что разрешить после -
, измените .+?
на, например, [a-zA-Z0-9]+?
, чтобы соответствовать только буквенно-цифровым символам.
С .NET regex (и почти только .NET) вы можете использовать:
(?:(-\S+)\s*)+
Группа 1 будет содержать список всех подстроенных подстрок.
Или, может быть, просто использовать Matches
в вашем случае достаточно:
var re = new Regex(@"-\S+");
var matches = re.Matches(str);
preg_match_all(...)
; используя флагPREG_SET_ORDER
, он возвращает многомерный массив, первый массив, содержащий первый набор, второй массив, содержащий второй набор и т. д. (Другие флаги допускают разные представления.) Я предполагаю, что если .NET и PHP внедрили его, другие языки тоже. – Andrew Cheong 15 June 2012 в 14:56preg_match_all()
повторно применяет регулярное выражение и возвращает собранные результаты, похожие на метод .NETMatches()
. OP хочет выполнить один i> совпадение, которое будет потреблять всю строку, а затем разбить отдельные записи. .NET предоставляетCaptureCollection
для этой цели, но PHP не имеет эквивалента. – Alan Moore 15 June 2012 в 16:52CaptureCollection
может действительно разделить что-то вроде/^hello, (\w+\s*)+$/
, сопоставленное с «привет», john doe & quot; как "john" и "doe", тогда как PHP (и другие языки) не могут. – Andrew Cheong 15 June 2012 в 17:00