Javascript Regexp在尝试将非空白与正在运行的演示进行匹配时表现得很奇怪

Javascript Regexp behaves odd when trying to match non-whitespace with working demo

本文关键字:Regexp 空白 运行 Javascript      更新时间:2023-09-26

嗯,我只是似乎不了解RegExp的某些方面。有人能介绍一下我吗?RegExp中是否存在导致不匹配的隐含单词?我的假设是,子串"slt"包含一些隐藏的最高机密詹姆斯·邦德符号,这使得RegExp失败。

演示:工作演示

//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

我的假设是,slt包含一些隐藏的绝密james bond符号,这使得正则表达式无法通过

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

更新的演示

或者,您可以使用regex文字。由于它是字面意思(而不是字符串),我们不必逃避反弹:

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

此外,您可以使用'S,而不是使用[^'s],这是一样的。