模拟echo语句的JavaScript Regexp

模拟echo语句的JavaScript Regexp,javascript,regex,Javascript,Regex,我已经胡闹了好几个小时了,但我似乎没办法解决它。我基本上是在尝试创建一个类似于php的echo(没有参数)的js Regexp。以下是我试图获取的模式和值 var reg = /echo +[^\s(].+[//"';]/; 'echo "test";'.match(reg); //echo "test"; 'echo test'.match(reg); //echo test 'echo "test me out"; dd'.matc

我已经胡闹了好几个小时了,但我似乎没办法解决它。我基本上是在尝试创建一个类似于php的echo(没有参数)的js Regexp。以下是我试图获取的模式和值

var reg = /echo +[^\s(].+[//"';]/;

'echo "test";'.match(reg);              //echo "test";
'echo test'.match(reg);                 //echo test
'echo "test me out"; dd'.match(reg);    //echo "test me out"
'echo "test me out" dd'.match(reg);     //echo "test me out"
'echo test;'.match(reg);                //echo test;
'echo "test "'.match(reg);              //echo "test "
"echo 'test'".match(reg);               //echo 'test'


//These should all return null
'echo (test)'.match(reg);
'/echo test'.match(reg);
'"echo test"'.match(reg);
"'echo test'".match(reg);
我在这里举了一个例子:

您似乎在寻找

var reg = /^echo +(?:\w+|"[^"]*"|'[^']*');?/;

此正则表达式既匹配所需内容,又捕获正在搜索的文本:

var reg=/^[\t]*echo+(?:”([^']*)“|”([^']*)”([^']*)“|”(\w+)/;

例如,
'echo“test”“.match(reg)
将返回
[“echo”test”“,未定义,“test”,未定义]
,您可以使用
匹配[2]
来获取包含
测试的字符串


但是,可以使用第一个、第二个或第三个捕获,具体取决于引号的样式。我不知道如何使它们都使用相同的捕获而不使用JavaScript不支持的捕获。您可以尝试以下模式,该模式允许在引号内转义引号:

/^echo (?:"(?:[^"\\]+|\\{2}|\\[\s\S])*"|'(?:[^'\\]+|\\{2}|\\[\s\S])*'|[a-z]\w*)/

Simulate?simlar?regexp的作用是匹配字符串,而不是其他任何东西。您是否要求“一个regex来匹配echo语句”?这正是我想要的。您的第一个示例有一个不一致的地方。您给它字符串
echo“test”;
并说它应该返回
“test”;“
。您的意思是输入为
echo”测试;“
,或者输出为”
“test”
?编辑没关系,我看那只是右边的注释,没什么重要的。@RoryO'Kane Yep打字错误。已修复。关闭!但“echo”测试失败”“@GrantKiely:Oops,忘了第二个
*
。这个答案适用于问题中的所有测试用例。谢谢,你是一位学者和绅士。我忘了还有一个测试,有没有办法在回显之前允许制表符或空格?那
/…(“|“|”)(.+?)\1/
?@GrantKiely-Sure;查看更新的正则表达式。我只是在
^
之后添加了
[\t]*
。行的开头,
[\t]
表示制表符或空格(使用空格),和0或更多。@Bergi是个好主意,但它自己也有一个问题。它确实合并了捕获,但在没有引号的情况下不会捕获所有文本—
(.+?)
在这种情况下只匹配一个字符。例如,对于
echo test
,捕获是
t
。该正则表达式也匹配
echo(test)
虽然它不应该。并且将
更改为
\w
以修复引号中的空格。@Rory:是的,这只是一个新想法的草图。我想它可以使用lookahead来细化捕获的值。
/^echo (?:"(?:[^"\\]+|\\{2}|\\[\s\S])*"|'(?:[^'\\]+|\\{2}|\\[\s\S])*'|[a-z]\w*)/