gpt4 book ai didi

尝试将非空白与工作演示匹配时,Javascript Regexp 表现奇怪

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:28:18 25 4
gpt4 key购买 nike

好吧,我似乎不明白有关 RegExp 的某些事情。有人可以给我一些启发吗? RegExp 中是否存在一些导致不匹配的隐含词?我的假设是子字符串“slt”包含一些隐藏的绝密 James Bond 标志,这使得 RegExp 失败。

摆弄演示: working demo

//does not work
var funcArgString="c09__id slt ccc";
var myRegExp = new RegExp("([^ \s]*) ([^ \s]*) ([^ \s]*)","g");
alert(myRegExp.exec(funcArgString));

//works... why???
var funcArgString="c09__id abcdefg ccc";
var myRegExp = new RegExp("([^ \s]*) ([^ \s]*) ([^ \s]*)","g");
alert(myRegExp.exec(funcArgString));

//works as well
var funcArgString="c09__id slt ccc";
var myRegExp = new RegExp("(.*) (.*) (.*)","g");
alert(myRegExp.exec(funcArgString));

最佳答案

如果您想在正则表达式中使用反斜杠 \,如果您将表达式作为 string 传递,则必须使用两个 \\ >:

var myRegExp = new RegExp("([^\\s]*) ([^\\s]*) ([^\\s]*)","g");

反斜杠是 JavaScript 字符串中的转义字符,它会被这样计算。要插入文字反斜杠,您必须将其转义(因此使用双反斜杠)。

另请注意,您可以省略字符组中的额外空格,因为它已被 \s 覆盖。

我假设 JavaScript 将 \s 作为无效字符序列丢弃,并按字面意思使用 s

这是你只使用一个反冲的结果表达式:

> new RegExp("([^\s]*) ([^\s]*) ([^\s]*)","g");
/([^s]*) ([^s]*) ([^s]*)/g

My assumption is that the slt contains some hidden top secret james bond sign which makes the regexp fail

是的,在这种情况下,反派是 s ;) ([^s]*) 匹配每个字符但是 s 所以第一个字符串不匹配。

Updated DEMO

或者,您可以使用 regex literal .因为它是文字(而不是字符串),我们不必逃避强烈反对:

var funcArgString="c09__id slt ccc";
var myRegExp = /([^\s]*) ([^\s]*) ([^\s]*)/g;
alert(myRegExp.exec(funcArgString));

关于尝试将非空白与工作演示匹配时,Javascript Regexp 表现奇怪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6467335/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com