我有这个字符串:
Test block {{section1|val}}
test block
{| class="class1"
some test
|}
我想要获得以下元素:
Test block
{{section1|val}}
test block
{| class="class1"\nsome test\n|}
我可以使用以下正则表达式使用{
/ }
来获得块:
const regex = /(\{(.|[\r\n])*?)\}/g;
const matches = content.match(regex);
但是我如何同时获得其他文本块。
感谢您的帮助! 蒂埃里
答案 0 :(得分:2)
在{{ }}
分隔符,{| }}
分隔符和除{
之外的所有分隔符之间进行替换:
const input = `Test block {{section1|val}}
test block
{| class="class1"
some test
|}`;
console.log(input.match(/{{.*?}}|{\|.*?\|}|[^{]+/gs));
如果您不想匹配分隔符之外的前导/后跟空格,请更改为
{{.*?}}|{\|.*?\|}|\S[^{]+[^{\s]
^^ ^^^^^^
答案 1 :(得分:2)
这个简单的两个交替正则表达式可以完成您的工作。
\w+(?:\s+\w+)*|\{+[\w\W]*?\}+
在这里,\w+(?:\s+\w+)*
正则表达式匹配普通文本abc
或abc xyx
的字符串,而\{+[\w\W]*?\}+
正则表达式匹配类型{{abc}}
或{xyz}
的文本< / p>
var s = `Test block {{section1|val}}
test block
{| class="class1"
some test
|}`;
var arr = s.match(/\w+(?:\s+\w+)|\{+[\w\W]*?\}+/g);
console.log(arr);
答案 2 :(得分:1)
我希望这对您有帮助
[^{]+
-匹配{
之前的纯文本。
{[^}]+}}?
-{}
之间的匹配文本。
let str = `Test block {{section1|val}}
test block
{| class="class1"
some test
|} foo bar`
let temp = str.match(/[^{]+|{[^}]+}}?/g)
let op = temp.map(e=> e.trim().replace(/^\n|\n$/g,''))
console.log(op)