【问题标题】:Positive Lookahead with javacsripts new RegExp() function带有 javacsripts 新 RegExp() 函数的正向前瞻
【发布时间】:2017-10-06 13:08:23
【问题描述】:

我遇到以下情况:

var x = "dot.test:semicolon;exclamation!Question?";
var separators = ['\\\!', '\\\.', '\\\(', '\\\)', ':', ';', '\\\?'];
var tokens = x.split(new RegExp(separators.join('|'), 'g'));

//expected output : ['dot.', 'test:', 'semicolon;', and so on...]

这工作得很好。我现在想将 RegExp 转换为一个正的前瞻表达式,它将分隔符保留在字符串中。我不确定如何使用 javascripts new RegExp() 函数做这样的事情。我想包含 [A-Z][a-z][0-9] 和所有其他符号,因为我将解析普通文本并希望在每种情况下都保留分隔符。

非常感谢您的建议!

【问题讨论】:

  • 喜欢x.split(new RegExp("(?=[" + separators.join('') + "])"))?请注意,如果分隔符是单个字符,并且它们就像您拥有的一样,您可以使用 var separators = ['!', '.', '(', ')', ':', ';', '?']; 因为在 [...] 内部它们不需要转义。预期的输出是什么?
  • 哦,太棒了,是的,就像那样!是否可以始终在前一个对象中包含分隔符?例如:现在,这样做我得到'dot', '.test', ... - 但我想要'dot.', 'test:', ... (?)
  • 请在问题中添加预期输出。很明显,前瞻是不够的。
  • 我编辑了问题。
  • 好的,你删除了(hello),我很困惑里面那个字符串的预期输出是什么。现在,如果您只希望分隔符出现在令牌之后,请尝试 x.match(new RegExp("[^" + separators.join('') + "]+[" + separators.join('') + "]*", "g"))

标签: javascript node.js regex lookahead


【解决方案1】:

您似乎想要匹配除数组中定义的字符之外的任何字符,然后匹配那些字符(如果存在)。使用

var x = "dot.test:semicolon;exclamation!Question?";
var separators = ['!', '.', '(', ')', ':', ';', '?'];
var tokens = x.match(new RegExp("[^" + separators.join('') + "]+[" + separators.join('') + "]*", "g"));
console.log(tokens);

如果你想扩展分隔符列表,你只需要转义-,\]^

【讨论】:

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