【问题标题】:How to split this into tokens?如何将其拆分为令牌?
【发布时间】:2017-02-27 22:56:02
【问题描述】:

我有这个数据:

/some test/ -> next data
prev<-/now/->/how about this/ 
asd<-/rege\/x/
/\/\//
/\\/
/^\d+$/ <- /\./
/\./ -> /\d/

我想拆分它的信息令牌\w+|/.*?/&lt;--&gt;-&gt;&lt;- 不能出现在/here/
我试过this,但在这种情况下失败了/\/\//

const data = `/some test/ -> next data
prev<-/now/->/how about this/ 
asd<-/rege\/x/
/\/\//
/\\/
/^\d+$/ <- /\./
/\./ -> /\d/`

console.log(data.split(/\s*(\w+|\/.*?\/\B)\s*/).filter(x => x != ""))

我应该在我的正则表达式中做什么来涵盖这部分?

【问题讨论】:

  • @WiktorStribiżew 这就是我想要的,非常感谢:)
  • 我想你可以使用任何方法来逃避,但你会看不到分隔符的开始位置。没有它,您的令牌将转移https://regex101.com/r/EK8Yun/4。并且总的解析是没有意义的......虽然解析 Perl $v =~ \//x/; 是一个错误。
  • 其实$v =~ \//x\/;应该抛出,因为这里没有有效的token,只允许/^\w+$/'&lt;-''-&gt;'/^\/.*?\/$/

标签: javascript arrays regex


【解决方案1】:

假设您不能在以 /.../ 子字符串开头的未转义 / 之前有转义的 / 字符,您可以使用

/\s*(\w+|\/[^\/\\]*(?:\\.[^\/\\]*)*\/)\s*/g

regex demo

如果可以转义换行符(如 CR 或 LF),则需要将 . 替换为 [\s\S] / [^] 以匹配任何字符。

注意:\/[^\/\\]*(?:\\.[^\/\\]*)*\/ 匹配...

  • \/ - 一个/
  • [^\/\\]* - 除了 /\ 之外还有 0+ 个字符
  • (?:\\.[^\/\\]*)* - 零个或多个序列
    • \\. - 转义字符
    • [^\/\\]* - 除了 /\ 之外的 0+ 个字符
  • \/ - 一个 / 字符

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多