如何在JavaScript中获取单词或索引后的substr?
我的DOM中有以下元素如何在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
<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) +
'×tamp=' + (new Date).getTime();
}catch(e){}
})(this,'_klarnaCheckout','klarna-checkout-container',document);
/* ]]> */
</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'))
})