Javascript Regex:在引号中为每个单词加前缀

Javascript Regex:在引号中为每个单词加前缀,javascript,regex,Javascript,Regex,使用javascript和regex,我想在每个单词前面加一个加号,即引号内的单词 给定以下字符串: "this is in quotes" not in quote "more quotes" 我想退回这个: "+this +is +in +quotes" not in quote "+more +quotes" 在那之后,我想删除所有的引号,这不是一个问题,使用一个简单的替换,但如果这一切都可以在一个正则表达式中完成,那将是很酷的 我知道我可以用\”(.*?\”选择引号中的所有内容,(?

使用javascript和regex,我想在每个单词前面加一个加号,即引号内的单词

给定以下字符串:

"this is in quotes" not in quote "more quotes"
我想退回这个:

"+this +is +in +quotes" not in quote "+more +quotes"
在那之后,我想删除所有的引号,这不是一个问题,使用一个简单的替换,但如果这一切都可以在一个正则表达式中完成,那将是很酷的


我知道我可以用
\”(.*?\”
选择引号中的所有内容,
(?选择每个单词的开头,但我不知道如何将它们全部放在一起。

你可以用一个正则表达式来做

其思想是向前看,只匹配后跟“…chars quote valid string”的单词,其中“valid string”不包含引号或平衡的引号对

quotes\u re=`
\\w+#一个字
(?=#后接。。
[^“]*#纯文本(可能为空),然后。。。
“#引用一句话,然后。。。
(
[^“]+#一些纯文本
|#或
“[^”]*”#带引号的字符串
)*#0次或以上
$#字符串末尾
)
`;
让正则表达式=(src,flags)=>
新的RegExp(src.replace(/#.*\s+/g',),标志);
s='“这是引号中的”不在引号中“更多引号”结束
console.log('regex',regex(quotes_re,'g')。来源)

console.log('result',s.replace(regex(quotes_re,'g'),'+$&'))
您可以用一个regex来完成

其思想是向前看,只匹配后跟“…chars quote valid string”的单词,其中“valid string”不包含引号或平衡的引号对

quotes\u re=`
\\w+#一个字
(?=#后接。。
[^“]*#纯文本(可能为空),然后。。。
“#引用一句话,然后。。。
(
[^“]+#一些纯文本
|#或
“[^”]*”#带引号的字符串
)*#0次或以上
$#字符串末尾
)
`;
让正则表达式=(src,flags)=>
新的RegExp(src.replace(/#.*\s+/g',),标志);
s='“这是引号中的”不在引号中“更多引号”结束
console.log('regex',regex(quotes_re,'g')。来源)

console.log('result',s.replace(regex(quotes_re,'g'),'+$&'))
您可以先匹配引号内的部分,然后使用它,通过在前面添加一个
+
来更改每个单词

let input='“这是引号中的”而不是引号中的“更多引号”;
设stringInQuotesRegex=/“[^”]+”/g;
让输出=输入.replace(stringInQuotesRegex,replace)
console.log(输出)
函数替换程序(匹配){
设eachWordRegex=/\w+/g;
返回匹配。替换(eachWordRegex,+$&);

}
您可以先匹配引号内的部分,然后使用将通过在每个单词前面添加
+
来更改每个单词的部分

let input='“这是引号中的”而不是引号中的“更多引号”;
设stringInQuotesRegex=/“[^”]+”/g;
让输出=输入.replace(stringInQuotesRegex,replace)
console.log(输出)
函数替换程序(匹配){
设eachWordRegex=/\w+/g;
返回匹配。替换(eachWordRegex,+$&);

}
是否必须使用单个正则表达式才能选择引号中的每个单词?只提取引号中的字符串部分并对其进行处理更容易。使用正则表达式解析分隔模式(例如字符串、xml标记)并不太可行。最好以逐字符分析的方式进行。有一种使用正则表达式的解决方案,但严格来说并不正确,因为使用正则表达式不容易处理字符串的开头和结尾,因此可能会出现错误happen@VLAZ不,它不必是单个正则表达式。如果可能的话,它只是一个奖金。它必须是单个正则表达式才能选择吗引号中的每个单词?只提取引号中的字符串部分并对其进行处理更容易。使用正则表达式来解析分隔模式(例如字符串、xml标记)并非完全可行。最好以逐字符分析的方式进行。有一种使用正则表达式的解决方案,但严格来说并不正确,因为使用正则表达式不容易处理字符串的开头和结尾,因此可能会出现错误happen@VLAZ不,它不一定是一个单一的正则表达式。如果可能的话,它只是一个奖金。太棒了!非常感谢你,@georgireal我喜欢这样。为了简洁起见,一个中的完整正则表达式是
quotes\u re='\\w+(?=[^“]*”([^“]++[^“]*”*)“
太棒了!非常感谢你,@georgI非常喜欢这样。为了简洁起见,一个中的完整正则表达式是
quotes\w+(?=[^“]*”([^“]+”)*([^“+”)+)“^+”)*”([^+“^+”)“^+“^+”)*”)*”)。