Как я могу получить substr после слова или индекса в JavaScript? - PullRequest
0 голосов
/ 19 февраля 2019

У меня есть следующий элемент в моей DOM.

<div id="klarna-checkout-container" style="overflow-x: hidden;">

    <script type="text/javascript">
    /* <![CDATA[ */
    (function(w,k,i,d,n,c,l){
    w[k]=w[k]||function(){(w[k].q=w[k].q||[]).push(arguments)};
    l=w[k].config={
      container:w.document.getElementById(i),
      ORDER_URL:'https://checkout-eu.playground.klarna.com/yaco/orders/1234-fa14-4a0f-bf2d-5678',
      AUTH_HEADER:'KlarnaCheckout 76c9bumqmkt8oy7wcpnr6',
      LOCALE:'sv-SE',
      ORDER_STATUS:'checkout_incomplete',
      MERCHANT_TAC_URI:'https://demo.krokedil.se/klarnacheckout/terms/',
      MERCHANT_NAME:'K500956',
      GUI_OPTIONS:[],
      ALLOW_SEPARATE_SHIPPING_ADDRESS:true,
      PURCHASE_COUNTRY:'swe',
      PURCHASE_CURRENCY:'SEK',
      TESTDRIVE:true,
      CHECKOUT_DOMAIN:'https://checkout-eu.playground.klarna.com',
      BOOTSTRAP_SRC:'https://a.klarnacdn.net/kcoc/6788-345/checkout.bootstrap.js',
      CLIENT_EVENT_HOST:'https://evt.playground.klarna.com'
    };
    n=d.createElement('script');
    c=d.getElementById(i);
    n.async=!0;
    n.src=l.BOOTSTRAP_SRC;
    c.appendChild(n);
    try{
      ((w.Image && (new w.Image))||(d.createElement && d.createElement('img'))||{}).src =
        l.CLIENT_EVENT_HOST + '/v1/checkout/snippet/load' +
        '?sid=' + l.ORDER_URL.split('/').slice(-1) +
        '&order_status=' + w.encodeURIComponent(l.ORDER_STATUS) +
        '&timestamp=' + (new Date).getTime();
    }catch(e){}
    })(this,'_klarnaCheckout','klarna-checkout-container',document);
    /* ]]&gt; */
    </script>

</div>

Я хочу получить значение после слова с именем AUTH_HEADER:.Поэтому значение, которое я ищу: KlarnaCheckout 76c9bumqmkt8oy7wcpnr6

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

<script>
 $(document).ready(function() {

  var get_klarna_checkout_container = $('#klarna-checkout-container').text().trim();
  var klarna_checkout_container_index = get_klarna_checkout_container.indexOf('AUTH_HEADER:');
  var klarna_checkout_container_index_2 = get_klarna_checkout_container.substr(klarna_checkout_container_index, 289);

  console.log(klarna_checkout_container_index_2);


 });
</script>

Вывод файла console.log выше:

AUTH_HEADER: 'KlarnaCheckout 76c9bumqmkt8oy7wcpnr6', LOCALE: 'sv-SE', ORDER_STATUS: 'checkout_incomplete', MERCHANT_TAC_URI: '* 101IP * MERGING_HER_S_D_D_WARG_ND_RUS_ND_RUSN_N_D_K_ND_RUS_N_D_K_ND_RUS_N_S_NDPURCHASE_CO

Я стремлюсь к KlarnaCheckout 76c9bumqmkt8oy7wcpnr6

Проблема с моим кодом выше состоит в том, что он печатает много строк вместо простого добавления символов из того, что я добавил в методе substr.

Любая помощь приветствуется.Спасибо.

Ответы [ 5 ]

0 голосов
/ 19 февраля 2019

Если вы разделите текст с помощью клавиши + ": '", второй элемент разделенного индекса будет содержать значение с индексом 0, а затем вы можете снова разделить его с помощью "" "или"' ", который является первым элементом егорезультат будет содержать искомое значение.

const getHeaderValue = function (text, toFind) {
  return text.split(toFind + ":'")[1].split("'")[0];
};

$(document).ready(function() {
  var container = $('#klarna-checkout-container').text().trim()
  console.log(getHeaderValue(container, 'AUTH_HEADER'))
})
0 голосов
/ 19 февраля 2019
//This is one way to do it. Hope it helps.

    let div = document.querySelector("#klarna-checkout-container script").innerText,
    str = div.split(","),
    authHeader;
for(let index in str){
    let temp = str[index].split(":");
    if(temp[0].trim() === "AUTH_HEADER"){
        authHeader = temp[1].trim();
    }
}
0 голосов
/ 19 февраля 2019

Я думаю, что функция substr неверна.

string.substr(beginIndex, length);

Если вы хотите получить только 'KlarnaCheckout 76c9bumqmkt8oy7wcpnr6'
Пожалуйста, используйте:

var klarna_checkout_container_index = get_klarna_checkout_container.indexOf('AUTH_HEADER:') + 12;
var klarna_checkout_container_index_2 = get_klarna_checkout_container.substr(klarna_checkout_container_index, 36);
0 голосов
/ 19 февраля 2019

Я прошел маршрут регулярного выражения.Строка для поиска:

var found = klarna_checkout_container_index_2.match(/AUTH_HEADER:'(.+)'/);

    var get_klarna_checkout_container = $('#klarna-checkout-container').text().trim();
  var klarna_checkout_container_index = get_klarna_checkout_container.indexOf('AUTH_HEADER:');

  
  var klarna_checkout_container_index_2 = get_klarna_checkout_container.substr(klarna_checkout_container_index, 289);


var found = klarna_checkout_container_index_2.match(/AUTH_HEADER:'(.+)'/);

console.log(found[1]);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<div id="klarna-checkout-container" style="overflow-x: hidden;">

    <script type="text/javascript">
    /* <![CDATA[ */
    (function(w,k,i,d,n,c,l){
    w[k]=w[k]||function(){(w[k].q=w[k].q||[]).push(arguments)};
    l=w[k].config={
      container:w.document.getElementById(i),
      ORDER_URL:'https://checkout-eu.playground.klarna.com/yaco/orders/1234-fa14-4a0f-bf2d-5678',
      AUTH_HEADER:'KlarnaCheckout 76c9bumqmkt8oy7wcpnr6',
      LOCALE:'sv-SE',
      ORDER_STATUS:'checkout_incomplete',
      MERCHANT_TAC_URI:'https://demo.krokedil.se/klarnacheckout/terms/',
      MERCHANT_NAME:'K500956',
      GUI_OPTIONS:[],
      ALLOW_SEPARATE_SHIPPING_ADDRESS:true,
      PURCHASE_COUNTRY:'swe',
      PURCHASE_CURRENCY:'SEK',
      TESTDRIVE:true,
      CHECKOUT_DOMAIN:'https://checkout-eu.playground.klarna.com',
      BOOTSTRAP_SRC:'https://a.klarnacdn.net/kcoc/6788-345/checkout.bootstrap.js',
      CLIENT_EVENT_HOST:'https://evt.playground.klarna.com'
    };
    n=d.createElement('script');
    c=d.getElementById(i);
    n.async=!0;
    n.src=l.BOOTSTRAP_SRC;
    c.appendChild(n);
    try{
      ((w.Image && (new w.Image))||(d.createElement && d.createElement('img'))||{}).src =
        l.CLIENT_EVENT_HOST + '/v1/checkout/snippet/load' +
        '?sid=' + l.ORDER_URL.split('/').slice(-1) +
        '&order_status=' + w.encodeURIComponent(l.ORDER_STATUS) +
        '&timestamp=' + (new Date).getTime();
    }catch(e){}
    })(this,'_klarnaCheckout','klarna-checkout-container',document);
    /* ]]&gt; */
    </script>

</div>
0 голосов
/ 19 февраля 2019

В зависимости от того, что выводит ваш код, просто сделайте это:

if (typeof klarna_checkout_container_index_2 == "string") {
    klarna_checkout_container_index_2 = JSON.parse(klarna_checkout_container_index_2);
}
console.log(klarna_checkout_container_index_2["AUTH_HEADER"]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...