【发布时间】: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