繁体   English   中英

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

[英]How to replace everything except 100 characters before and after a given string?

我试图过滤一组数据,我必须处理~5000字符的多个条目。

我需要的是一些keyword之前和之后的100个字符。

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

示例输入:

abc123cde345fgh678ijk910keywordbc123cde345fgh678ijk910

所需的输出为+-5字符:

jk910keywordbc123

匹配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]); 

可以使用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大于可能的最大值时,这也将起作用,在这种情况下返回整个字符串。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM