我正在尝试过滤一组数据,并且我必须处理多个~5000
字符条目。
我需要的是一些keyword
前后的100个字符。
我研究了用于搜索和替换的正则表达式代码,但只找到一个keyword
的函数,而不是周围的字符。
示例输入:
abc123cde345fgh678ijk910keywordbc123cde345fgh678ijk910
包含+-5
字符的所需输出:
jk910keywordbc123
发布于 2019-06-03 06:46:15
匹配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]);
发布于 2019-06-03 10:12:01
针对此问题的一种解决方案可以使用String.indexOf()搜索输入string
中的keyword
的索引,然后使用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
大于可能的最大值时,这也会起作用,在本例中返回整个字符串。
https://stackoverflow.com/questions/56419464
复制相似问题