如何替换给定字符串前后除100个字符外的所有内容?

时间:2019-06-02 22:39:32

标签: javascript replace

我正在尝试过滤一组数据,并且必须处理~5000个字符的多个条目。

我需要在keyword前后加上100个字符。

我已经研究过用于搜索和替换的正则表达式代码,但只找到了获得一个keyword的函数,而不是周围的字符。

示例输入:

abc123cde345fgh678ijk910keywordbc123cde345fgh678ijk910

期望的输出,带有+-5个字符:

jk910keywordbc123

2 个答案:

答案 0 :(得分:3)

匹配100个字符,后跟关键字,再匹配100个字符:

const str = 'abc123cde345fgh678ijk910keywordbc123cde345fgh678ijk910';
const match = str.match(/.{5}keyword.{5}/);
console.log(match[0]);

如果您需要动态构建模式,则:

const str = 'abc123cde345fgh678ijk910keywordbc123cde345fgh678ijk910';
const keyword = 'keyword';
const pattern = new RegExp(`.{5}${keyword}.{5}`);
const match = str.match(pattern);
console.log(match[0]);

如果模式在正则表达式中可能包含具有特殊含义的字符,例如$,那么请确保在传递给new RegExp之前先对其进行转义:

// https://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript
const escape = s => s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');

const str = 'abc123cde345fgh678ijk910keyw$ordbc123cde345fgh678ijk910';
const keyword = 'keyw$ord';
const pattern = new RegExp(`.{5}${escape(keyword)}.{5}`);
const match = str.match(pattern);
console.log(match[0]);

答案 1 :(得分:0)

可以使用String.indexOf()在输入keyword内搜索string的索引,然后使用String.slice()来获取字符之间的字符。特定半径。

const str = 'abc123cde345fgh678ijk910keywordbc123cde345fgh678ijk910';

const getKeyword = (str, keyword, radius) =>
{
    let idx = str.indexOf(keyword);
    return str.slice(idx - radius, idx + keyword.length + radius);
}

console.log(getKeyword(str, "keyword", 5));
console.log(getKeyword(str, "keyword", 15));
console.log(getKeyword(str, "keyword", 1000));
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}

请注意,当radius大于可能的最大值时,这也将起作用,在这种情况下将返回整个字符串。

相关问题