我已经搞乱了几个小时,但我似乎无法破解它。我基本上试图创建一个类似于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/
答案 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+))/;
例如,'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*)/