Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在JavaScript中获取单词或索引后的substr?_Javascript_Jquery_Html_Arrays_Object - Fatal编程技术网

如何在JavaScript中获取单词或索引后的substr?

如何在JavaScript中获取单词或索引后的substr?,javascript,jquery,html,arrays,object,Javascript,Jquery,Html,Arrays,Object,我的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

我的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>
上面的console.log的输出是:

验证标头:'KlarnaCheckout 76c9bumqmkt8oy7wcpnr6', 地区:'sv-SE', 订单状态:“结帐未完成”, 商户名称:'', 商户名称:“K500956”, GUI_选项:[], 允许单独装运地址:true, 采购公司

我的目标是
Klarna76C9BUMQMKT8OY7WCPNR6

我上面的代码的问题是,它打印了大量字符串,而不是仅仅添加我在substr方法中添加的字符


感谢您的帮助。谢谢。

根据您的代码当前输出的内容,只需执行以下操作:

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"]);

我认为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);

我走的是regex路线。要找的线是

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\u checkout\u container\u index\u 2=获取klarna\u checkout\u container.substr(klarna\u checkout\u container\u index,289);
var found=klarna_checkout_container_index_2.match(/AUTH_HEADER:“(.+)”/);
console.log(找到[1])

/* 

如果使用“+”:“”键拆分文本,则拆分索引的第二项将包含索引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'))
})

请让你的文章更具可读性-代码相当混乱,不太容易阅读。您当前的代码有什么问题?@JackBashford对混乱的代码表示抱歉。我已经更新了上面的问题。您将看到console.log的输出输出了大量字符串,而不是仅添加从索引和结束索引开始的几个字符。输出的类型是什么?
console.log(klarna\u checkout\u container\u index\u 2的类型)
显示了什么?@JackBashford我已经更新了上面的答案。console.log现在有一个output,但是什么是
klarna\u checkout\u container\u index\u 2
的类型?谢谢。但是,如果我不确定在单词AUTH_标题后有多少个字符是单引号,您知道如何调整您的答案吗?您有正确的输出。我想问行
匹配(/AUTH_HEADER:“(.+)”/)
是什么意思?这是一个正则表达式,它是字符串模式匹配。如何阅读它是寻找一个模式,它字面上有AUTH_头:,后面跟任意字符多次,并捕获该值以供以后使用,后面跟着另一个单引号。捕获该值的关键位是(+.+)。“.”是任何字符的通配符,“+”是一个或多个字符的字符数。重点是正则表达式功能强大但有点深奥,这就是为什么很多人不喜欢它,但我通常推荐它。谢谢你的回答,它工作起来很有魅力。substr面临的问题是,在获取索引后,我无法确定数字字符。最后要注意的一点是。当像我这样进行模式匹配时,匹配返回一个数组,第一个索引是捕获的整个字符串模式。其他索引是显式匹配,这就是为什么我记录了find[1]而不是find或find[0]的原因。很乐意帮忙。
//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();
    }
}
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'))
})