我有一串像:
const str = 'My [Link format](https://google.com) demo'
我希望单词array是这样的:
['My', '[Link format](https://google.com)', 'demo']
在javascript中做什么?
我试着使用split()和str.match(),但还没有成功。
我有一串像:
const str = 'My [Link format](https://google.com) demo'
我希望单词array是这样的:
['My', '[Link format](https://google.com)', 'demo']
在javascript中做什么?
我试着使用split()和str.match(),但还没有成功。
3条答案
按热度按时间3gtaxfhh1#
这是对作为分隔符的空格的简单拆分,但我们使用负前瞻来检查左右方括号
[]
和圆括号()
的组合请在此处尝试:https://jsfiddle.net/m4q6e9x7/
在小提琴中,我试着向两个独立的消极旁观者展示了括号类型的组合:* (我在圆括号中添加了一个空格以证明此概念)*
忽略
[]
之间的空格忽略
()
之间的空格因此,我们可以轻松地将这两个条件结合起来,因为我们需要它们都“不”匹配。
因为
[]
和()
需要转义,所以如果我们修改并测试大括号{}
之间的空格,可能会更容易看到正则表达式5rgfhyps2#
这两种解决方案都假设字符串的格式正确(基本上是指“]”和“('之间没有空格,[...]中没有”]“字符),并且直觉相似。除了具体的例子之外,您并没有提供关于输入字符串可以是什么的信息--因此解决方案在这种情况下以及非常类似的情况下都能很好地工作。第二种解决方案很容易根据需要进行修改,first很容易扩展到检查字符串是否实际上不正确。
使用正则表达式的解决方案
下面的代码查找第一个'['之前的所有内容,'[...](...)'模式中的所有内容(注意:第一个......不能包含']',第二个- ')',但我认为这将使一个不正确的输入摆在首位),以及之后的一切。
给出
res
为从那里,你可以修剪这个数组(
'My ' => 'My'
)中的每一个条目,例如使用trim函数,如下所示:请查看此处以了解数组从.match获取的内容()方法表示,但通常除了索引0之外,它包含捕获组,即字符串的部分对应于用括号括起来的正则表达式的部分。如果您不熟悉正则表达式(regexes)在JS中,或者根本就在,你会很容易地找到很多关于这个主题的在线资源,在掌握了基础知识之后,regex101是一个很好的工具来实验正则表达式并探索它们的功能。当使用它时,你可能应该从左边的菜单中选择EcmaSCRIPT/JS风格。
不带正则表达式的等效解决方案
等效的解决方案是手动查找第一个'['在哪里,以及'[...]在哪里(...)'模式结束。然后拼接部分(在“[”之前、模式之后和模式之后),并可能修剪它们。因此,只需循环字符串的字符以搜索“[”,而不是“]",(',')'。注意,在这种情况下,如果字符串具有意外/不正确的形式,您可以轻松地、粒度地决定如何处理。
TODO:我可能会在有时间时草拟一些程式码
ibps3vxo3#
正则表达式是你的朋友!