用Javascript标记字符串,包括不匹配的块

时间:2019-01-27 09:58:28

标签: javascript regex

我有这个字符串:

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);

但是我如何同时获得其他文本块。

感谢您的帮助! 蒂埃里

3 个答案:

答案 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+)*正则表达式匹配普通文本abcabc xyx的字符串,而\{+[\w\W]*?\}+正则表达式匹配类型{{abc}}{xyz}的文本< / p>

Demo

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)