You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JS如何实现字符串精准匹配子串,避免匹配到含多余字符的内容?

问题原因

你当前使用includes做子串匹配的逻辑存在漏洞:判断是否包含-${symbol}时,-USD刚好是-USDT的前缀,会被误判为匹配成功,才会出现USD分类下混入USDT交易对的问题。

解决方案

推荐优先使用字符串拆分完全匹配的方案,逻辑更直观,不存在正则转义风险:

var symbols = ['ETH', 'BTC', 'USD', 'USDT'];
var marketPairs = ['AAVE-USD', 'AAVE-USDT', 'AAVE-BTC', 'AAVE-ETH'];

var marketDict = {};

for (let i = 0; i < symbols.length; i++) {
    const currentSymbol = symbols[i];
    marketDict[currentSymbol] = [];
    for (let j = 0; j < marketPairs.length; j++) {
        const pair = marketPairs[j];
        // 按分隔符拆分交易对为两个独立币种
        const [baseCoin, quoteCoin] = pair.split('-');
        // 完全匹配任意一段即可加入对应分类
        if (baseCoin === currentSymbol || quoteCoin === currentSymbol) {
            marketDict[currentSymbol].push(pair);
        }
    }
}

如果你不想拆分字符串,也可以用正则限定匹配边界,确保目标符号要么在交易对开头且后缀为-,要么在交易对结尾且前缀为-,实现精确匹配:

var symbols = ['ETH', 'BTC', 'USD', 'USDT'];
var marketPairs = ['AAVE-USD', 'AAVE-USDT', 'AAVE-BTC', 'AAVE-ETH'];

var marketDict = {};

for (let i = 0; i < symbols.length; i++) {
    const currentSymbol = symbols[i];
    marketDict[currentSymbol] = [];
    // 构造带边界限定的正则
    const matchReg = new RegExp(`(^${currentSymbol}-)|(-${currentSymbol}$)`);
    for (let j = 0; j < marketPairs.length; j++) {
        const pair = marketPairs[j];
        if (matchReg.test(pair)) {
            marketDict[currentSymbol].push(pair);
        }
    }
}

两种方案运行后,marketDict['USD']的结果都只有['AAVE-USD'],不会混入USDT相关的交易对。

内容的提问来源于stack exchange,提问作者Mr. Goose

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 22:54:05