如何使用正则表达式计算或替换javascript中{}或[]之间的所有匹配字?
我需要用javascript处理一个包含may语句的文件。还有一些特殊的句子用括号[]或{}括起来。在这个括号中,这个词可以出现多次。因此,为了找到一个词,我首先尝试:如何使用正则表达式计算或替换javascript中{}或[]之间的所有匹配字?,javascript,regex,Javascript,Regex,我需要用javascript处理一个包含may语句的文件。还有一些特殊的句子用括号[]或{}括起来。在这个括号中,这个词可以出现多次。因此,为了找到一个词,我首先尝试: RegExp('\\bmyword\\b', 'g'); 但是,我如何插入单词需要放在括号内,而任何东西都可以放在括号和单词之间呢? 如果我要在10万个句子中寻找500个单词,我该如何加快速度呢?然后我应该使用模式吗?您可以使用/\[^[\]]*].{[^{}]*}/g模式提取{}和[]之间的所有子字符串,并仅在这些匹配中查找
RegExp('\\bmyword\\b', 'g');
但是,我如何插入单词需要放在括号内,而任何东西都可以放在括号和单词之间呢?
如果我要在10万个句子中寻找500个单词,我该如何加快速度呢?然后我应该使用模式吗?您可以使用
/\[^[\]]*].{[^{}]*}/g
模式提取{}
和[]
之间的所有子字符串,并仅在这些匹配中查找所需的单词
如果您在word[myword hisword]中搜索word
,并在此处搜索word,{word myword theirword}。
,您希望3
作为输出:
var s=“word[myword hisword]和这里的word,{word myword theirword}”,
关键字=“word”,
结果=0,
rx=/\[^[\]*]{[^{}]*}/g;
//计数
var匹配=s匹配(rx);
var rxWord=new RegExp(“\\b”+关键字+”\\b,“g”);
for(匹配的变量x){
结果+=x.match(rxWord).长度;
}
console.log(结果)
//替换
log(s.replace(rx,函数($0){return$0.replace(rxWord,$&_ID');})代码>您是否要用其他词替换这些词?或者简单地提取?我不确定我是否完全理解您试图做的事情,但我认为类似的操作将起作用。[{\[[^\]]*\b(for)\b[^{\[]*[}\]]
@WiktorStribiżew它正在提取和计数。这有什么不同吗?是的,现在清楚多了。非常感谢Wiktor。看起来很复杂。我必须学习更多关于正则表达式的知识。还有一个问题。也许以后我必须在一个词后面加上和ID。那会是什么样子?您的解决方案看起来非常漂亮和干净。该死的,那将是一个正确的替换,我在第一个回答中说不,对不起。@Ajay如果你需要替换rxWord
中的rx
匹配项,你可以使用s.replace(rx,function($0){return$0.replace(rxWord,$&u ID');})
其中,$&\u ID
是匹配值($&
)和附加的子字符串(这里,\u ID
)。天哪,太多新东西了,非常感谢:)如果它与您的解决方案相似,您认为它会对性能产生显著影响吗?或者它是否值得重构?