JavaScript Regexp来模拟echo语句

时间:2013-08-02 15:54:00

标签: 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'.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);

我在这里做了一个例子: http://jsfiddle.net/4HS63/

3 个答案:

答案 0 :(得分:2)

你似乎在寻找

var reg = /^echo +(?:\w+|"[^"]*"|'[^']*');?/;
^        // anchor for string beginning
echo     // the literal "echo"
 +       // one or more blanks
(?:      // a non-capturing group around the alternation
 \w+     // one or more word characters ( == [a-zA-Z0-9_])
|        // or
 "[^"]*" // a quote followed by non-quotes followed by a quote
|'[^']*' // the same for apostrophes
)
;?       // an optional semicolon

答案 1 :(得分:0)

此正则表达式符合您的要求捕获正在搜索的文本:

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

jsFiddle

例如,'echo "test"'.match(reg)将返回["echo "test"", undefined, "test", undefined],您可以使用theMatch[2]获取包含test的字符串。

但是,可以使用第一次,第二次或第三次捕获,具体取决于引号的样式。我不知道如何在不使用JavaScript不支持的lookbehind的情况下让它们全部使用相同的捕获。

答案 2 :(得分:0)

您可以尝试使用引号内的转义引号的此模式:

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