我正在尝试过滤一组数据,并且必须处理~5000
个字符的多个条目。
我需要在keyword
前后加上100个字符。
我已经研究过用于搜索和替换的正则表达式代码,但只找到了获得一个keyword
的函数,而不是周围的字符。
示例输入:
abc123cde345fgh678ijk910keywordbc123cde345fgh678ijk910
期望的输出,带有+-5
个字符:
jk910keywordbc123
答案 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
大于可能的最大值时,这也将起作用,在这种情况下将返回整个字符串。