具有特定格式的分割字符串Angular 6,Typescript

时间:2018-11-30 09:47:26

标签: javascript regex angular typescript

我正在尝试将正则表达式与javascript一起使用,我有以下列表:

  

word1 @ ['id1','name1'] @@ ['id2','name2'] @ @ ['id3','name3'] @ word2   @ ['id4','name4'] @ word3 @ ['id5','name5'] @

我想检测所有事物:@ ['.....'] @并像这样拆分它们:

word1
@['id1', 'name1']@
@['id2', 'name2']@
@['id3', 'name3']@
word2
@['id4', 'name4']@
word3
@['id5', 'name5']@

所以我以后可以阅读ID和名称,以便创建链接:

<a href="url/[id]">[name]</a>

我尝试过此正则表达式:

[@\['](.)*['\]@]

但这只是标记从第一个@ ['到名称5末尾的所有内容。

简单代码:

const reg = /[@\['](.)*['\]@]]/;
const arr = content.split(reg);

如果有人知道如何拆分它,我将不胜感激分享解决方案。 谢谢!

2 个答案:

答案 0 :(得分:4)

考虑使用split代替.match,这可能使逻辑更容易:匹配单词字符,或匹配@[,后跟任意字符,后跟]@

\w+|@\[.*?\]@

const input = `word1 @['id1', 'name1']@ @['id2', 'name2']@ @['id3', 'name3']@ word2 @['id4', 'name4']@ word3 @['id5', 'name5']@`;
console.log(input.match(/\w+|@\[.*?\]@/g));
  

如果[]的内部可能包含]@,而您不想匹配,例如@['id1', ']@', 'name1']@,那么您将需要更多的逻辑-{ {1}},重复使用[]'分隔的字符串组:

"

https://regex101.com/r/rDW2iD/1

答案 1 :(得分:1)

您可以使用

来分割字符串
s.split(/\s*(@\[.*?]@)\s*/).filter(Boolean)

请参阅JS演示

var s = "word1 @['id1', 'name1']@ @['id2', 'name2']@ @['id3', 'name3']@ word2 @['id4', 'name4']@ word3 @['id5', 'name5']@";
console.log(s.split(/\s*(@\[.*?]@)\s*/).filter(Boolean));

模式匹配0+个空格,然后捕获@[,除换行符以外的任何0+字符,并尽可能少地捕获到第一个]@,然后匹配而不捕获0+空格。捕获的子字符串落在结果数组中,.filter(Boolean)删除空项目。