Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/466.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用正则表达式计算或替换javascript中{}或[]之间的所有匹配字?_Javascript_Regex - Fatal编程技术网

如何使用正则表达式计算或替换javascript中{}或[]之间的所有匹配字?

如何使用正则表达式计算或替换javascript中{}或[]之间的所有匹配字?,javascript,regex,Javascript,Regex,我需要用javascript处理一个包含may语句的文件。还有一些特殊的句子用括号[]或{}括起来。在这个括号中,这个词可以出现多次。因此,为了找到一个词,我首先尝试: RegExp('\\bmyword\\b', 'g'); 但是,我如何插入单词需要放在括号内,而任何东西都可以放在括号和单词之间呢? 如果我要在10万个句子中寻找500个单词,我该如何加快速度呢?然后我应该使用模式吗?您可以使用/\[^[\]]*].{[^{}]*}/g模式提取{}和[]之间的所有子字符串,并仅在这些匹配中查找

我需要用javascript处理一个包含may语句的文件。还有一些特殊的句子用括号[]或{}括起来。在这个括号中,这个词可以出现多次。因此,为了找到一个词,我首先尝试:

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
)。天哪,太多新东西了,非常感谢:)如果它与您的解决方案相似,您认为它会对性能产生显著影响吗?或者它是否值得重构?