如何快速找到html和row text对应的位置?

发布于 2022-09-06 10:43:16 字数 282 浏览 9 评论 0

1. i <strong>want</strong> to eat <strong>hamburger</strong>!
2. i want to eat hamburger.

有这样一个问题,句子1是html,句子2是句子1的row text, 现在我取2.substr(0,10).trim(),i want to,如何得到第一句中'i want to'对应的位置?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

笑饮青盏花 2022-09-13 10:43:16

之前想过这个需求,这次看到这个题目才正式想了一下。
这个思路可能不大成熟,希望一起测试和改进。

const ori = 'I <strong>want</strong> to eat <strong>hamburger</strong> to <span>span</span> on a span thing!';
let raw;

const cheerio = require('cheerio');
let $ = cheerio.load(ori);

raw = $.text();

let getOccurrence = (arr, str) => {
    return arr.filter(item => item.indexOf(str) !== -1).length;
};

let isTagName = (base, queryStr) => {
    let occurrence = base.match(/<\w*>/g);

    return occurrence ? getOccurrence(occurrence, queryStr) > 0 : false;
};

let getPos = (base, query) => {
    let _base = base;
    let pos = 0;

    let queryChars = query.split(' ');

    let lastWord = queryChars[queryChars.length - 1], occurrence = getOccurrence(queryChars, lastWord);

    if(isTagName(_base, lastWord)){
        let exp = new RegExp(`<\w*${lastWord}\w*>`, 'g');
        let expEnd = new RegExp(`<\/\w*${lastWord}\w*>`, 'g');
        let temp = _base.match(exp)[0];
        let tempEnd = _base.match(expEnd)[0];

        let tempExp = new RegExp(`${temp}`, 'g');
        let tempExpEnd = new RegExp(`${tempEnd}`, 'g');

        _base = _base.replace(tempExp, new Array(temp.length).fill('_').join('')).replace(tempExpEnd, new Array(tempEnd.length).fill('_').join(''));
    }

    if(occurrence > 1){
        let newBase = _base.split(lastWord).splice(0, occurrence).join(lastWord);
        pos = `${newBase}${lastWord}`.length;
    }else{
        if(occurrence === 1){
            pos = _base.indexOf(lastWord) + lastWord.length;
        }else{
            pos = -1;
        }
    }

    return pos;
};

let getTestCase = (start, end) => {
    let query = raw.split(' ').splice(start, end).join(' ').trim();
    console.log(query);
    console.log(getPos(ori, query));
};

getTestCase(0, 7);
getTestCase(0, 6);
鹿! 2022-09-13 10:43:16
var str1 = "i <strong>want</strong> to eat <strong>hamburger</strong>!"
var str2 = "i want to eat hamburger."

function contain(str1, str2) {
    var bool = false;
    for (var i = 0, j = 0, l = str2.length; j < l; i++) {
        // 判断是否是标签 跳过标签
        if (str1[i] == "<") {
            bool = true;
            continue;
        } else if (str1[i] == ">") {
            bool = false;
            continue;
        } else if (bool) {
            continue;
        }

        if (str1[i] == str2[j]) {
            j++;
        } else {
            return i;
        }
    }
    return i-1;
}
console.log(contain(str1, str2.substr(0, 10).trim()))
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文