Вставьте запятые в числовую строку

client вызывается до того, как инициализируется; client var "экспортируется" (и вызывается) до завершения функции async. Когда вы звоните await client(), клиент все равно будет undefined.

отредактируйте, попробуйте что-то вроде этого

var client = async which => {
    var result =  await initSecrets("MyWebApi");
    var secret = JSON.parse(result.Payload);
    let api = new MyWebApiClient(secret.API_KEY, secret.API_SECRET); 
    return api(which) // assuming api class is returning a promise
}

async function initSecrets(secretName) {
    var input = {
    "secretName" : secretName
    };
    var result = await lambda.invoke({
       FunctionName: 'getSecrets',
       InvocationType: "RequestResponse",
       Payload: JSON.stringify(input)
    }).promise();
    return result;
}

exports.handler = async function (event, context) {

    var myReq = await client('Request');
    console.log(myReq);
};
34
задан BefittingTheorem 6 April 2009 в 13:36
поделиться

4 ответа

Если Ваш язык поддерживает положительные предварительные утверждения, то я думаю, что следующий regex будет работать:

(\d)(?=(\d{3})+$)

Продемонстрированный в Java:

import static org.junit.Assert.assertEquals;

import org.junit.Test;

public class CommifyTest {

    @Test
    public void testCommify() {
        String num0 = "1";
        String num1 = "123456";
        String num2 = "1234567";
        String num3 = "12345678";
        String num4 = "123456789";

        String regex = "(\\d)(?=(\\d{3})+$)";

        assertEquals("1", num0.replaceAll(regex, "$1,"));
        assertEquals("123,456", num1.replaceAll(regex, "$1,"));
        assertEquals("1,234,567", num2.replaceAll(regex, "$1,"));
        assertEquals("12,345,678", num3.replaceAll(regex, "$1,"));
        assertEquals("123,456,789", num4.replaceAll(regex, "$1,"));    
    }    
}

Следующая ссылка предполагает, что AS3 делает?

48
ответ дан toolkit 27 November 2019 в 16:22
поделиться

Если Ваш regex механизм имеет положительные предвидения, Вы могли бы сделать что-то вроде этого:

string.replace(/(\d)(?=(\d\d\d)+$)/, "$1,")

Где положительное предвидение (? =...), означает, что regex только соответствует, когда предварительное выражение... соответствует.

(Обратите внимание, что lookaround-выражения не всегда очень эффективны.)

9
ответ дан Niki 27 November 2019 в 16:22
поделиться

Это действительно не лучшее использование RegEx... Я не знаю о функции форматирования чисел, но этот поток, кажется, предоставляет решение.

function commaCoder(yourNum):String {
    //var yourNum:Number = new Number();
    var numtoString:String = new String();
    var numLength:Number = yourNum.toString().length;
    numtoString = "";

    for (i=0; i<numLength; i++) { 
        if ((numLength-i)%3 == 0 && i != 0) {
            numtoString += ",";
        }
        numtoString += yourNum.toString().charAt(i);
        trace(numtoString);
    }
    return numtoString;
}

Если Вы действительно настойчивы при использовании RegEx, Вы могли бы просто инвертировать строку, применить функцию замены RegEx, то инвертировать ее назад.

2
ответ дан Noldorin 27 November 2019 в 16:22
поделиться

sexeger хорош для этого. Короче говоря, sexeger является обратным regex, выполненным против обратной строки, из которой Вы инвертируете вывод. Это обычно более эффективно, чем альтернатива. Вот некоторый псевдокод для того, что Вы хотите сделать:

string = reverse string
string.replace(/(\d{3})(?!$)/g, "$1,")
string = reverse string

Вот, реализация Perl

#!/usr/bin/perl

use strict;
use warnings;

my $s = 13_456_789;

for my $n (1, 12, 123, 1234, 12345, 123456, 1234567) {
    my $s = reverse $n;
    $s =~ s/([0-9]{3})(?!$)/$1,/g;
    $s = reverse $s;
    print "$s\n";
}
2
ответ дан Chas. Owens 27 November 2019 в 16:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: