Javascript Regexp在尝试将非空白与正在运行的演示进行匹配时表现得很奇怪
Javascript Regexp behaves odd when trying to match non-whitespace with working demo
嗯,我只是似乎不了解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]
,这是一样的。
相关文章:
- 如何删除多行HTML排列中的空白
- 在Twitter上用ie9中的空白src访问iframe的contentWindow
- 不同浏览器中的空白字符正则表达式行为
- Javascript中的空白是什么
- Facebook共享显示一个接一个的空白页面
- 如果我在javascript中输入无效的电子邮件或空白,如何显示特定的文本框边框红色
- RegExp:匹配Javascript中除regex值之外的所有内容
- JavaScript正则表达式文本与RegExp对象
- 使用RegExp查找url中的字符
- 相同的RegExp返回不同的结果-第一次是正确的结果,第二次是null
- 从字符串末尾删除空白无效
- 全局标志仅与第一个匹配项匹配的Regexp
- AngularJS ng选项在选择一个选项后删除了默认的空白值
- javascript RegExp的奇怪行为:相同的正则表达式会产生不同的结果
- 替换为javascript中的regExp
- Nashorn和Rhino:使用空白regexp拆分字符串
- RegExp:如何排除空白
- Regexp去除等式中的空白空间
- 通过对象匹配Javascript regexp中的空白,通过regexp构造函数创建
- Javascript Regexp在尝试将非空白与正在运行的演示进行匹配时表现得很奇怪