Javascript Regexp和“;字符串文字“;
Javascript Regexp and "string literal"
我正在制作一个JS"命令行"模拟器。
我有Regexp:/([^'s"]+)|"([^'s"]+)"/g
。我想匹配单个单词,如echo
、wyświetl
、jd923h90asd8
。此外,我想匹配"字符串文字"——类似于"this is a string"
或"f82h3 23fhn aj293 dgja3 xcn32"
。
我对输入字符串使用match
方法来获得所有匹配项的数组。但问题是:当Regexp匹配"字符串文字"并将字符串返回到数组时,此字符串包括双引号。我不想要双引号,但问题是-为什么Regexp包含双引号?在Regexp中,引号""
从()
组中排除。为什么Regexp包含所有内容?
编辑:
var re = /([^'s"]+)|"([^'s"]+)"/g;
var process = function (text) {
return execute(text.match(re));
}
var execute = function (arr) {
console.log(arr);
try {
//... apply a function with arguments...
} catch (e) {
error(arr[0]+": wrong function");
return "";
}
}
对于输入echo abc "abc def" "ghi"
,Regexp返回数组["echo", "abc", "abc", "def", ""ghi""]
。我想制作一个Regexp,它将从该输入返回["echo", "abc", "abc def", "ghi"]
。
正则表达式("([^'s"]+)"
)的带引号部分不允许在引号中使用空格。尝试从中删除's
。如果需要匹配空字符串(""
),也可以考虑使用*
而不是+
:
/([^'s"]+)|"([^"]*)"/g
使用group(1)
或group(2)
。不是group()
或group(0)
。后面的2(完全等价)总是返回整个匹配的字符串,在您的情况下,该字符串包括引号。我希望这能解释发生了什么。
附言:由于您的RegEx是"或"RegEx,group(1)
和group(2)
永远不会同时拥有这两个内容。其中一个、另一个或两者都将为null或为空。后面没有对手的时候。
我刚刚意识到您正在使用match
方法将所有匹配项作为数组检索。在这种情况下,让我说这个方法总是在每种情况下捕获整个匹配的字符串(相当于上面的group(0)
)。没有办法告诉它检索其他组(如1或2)。因此,您有3种选择:
- 通过一些"后处理"将
"
从字符串中移除,并将其放入结果数组中 - 不要使用JavaScript的
match
方法,而是创建自己的等效方法(根据其中的情况使用group(1)
或group(2)
) - 更改正则表达式以将引号匹配为零宽度正lookahead和lookbehinds。不确定JavaScript是否支持,但应该是
/([^'s"]+)|(?<=")([^'s"]+)(?=")/g
匹配JavaScript字符串文本。以下是您要查找的内容:
/('w+|("|')(.*?)'2)/g
为了解释这一点:您要么寻找未加引号的单词字符,要么将引号与中间的任何字符匹配(例如,引号应该正确匹配,例如:使用regex backreference的"it's his dog"
)。
这被简化为警惕它与转义字符串不匹配,如:
"my '"complex'" string"
看起来你并没有担心最后一种情况。
http://regexr.com/3bdbi
- 从多行文字中获取第一个修剪的字符串
- 如何在只接受字符串值/文字的HTML属性中调用函数
- 是否可以将字符串转换为文字对象数组
- Vim-当代码的文字字符串中有括号时,如何实现正确的缩进
- JavaScript 中数据库数据的未终止字符串文字
- 错误:JSON分析错误:使用角度转换时,属性名称必须是字符串文字
- Javascript将字符串中的对象转换为对象文字
- 使用鸭子类型的对象键入字符串文字
- iMacros Firefox错误:“;未终止的字符串文字“;
- 为什么我得到“;非法字符语法错误未终止的字符串文字“;当我使用javascript时
- 如何在JS中的对象文字中传递字符串
- 试图访问作为字符串的对象文字键
- JavaScript replace() 不替换包含文字 字符串的文本
- 将变量中的字符串作为 javascript 对象文字中的键传递
- Python 将 str 转换为 JavaScript 文字字符串
- 比较两个字符串(jquery .text() 和文字字符串)
- SonarQube 并检查文字字符串
- 如何在 javascript 文件中将大型双精度序列存储为文字字符串
- 我如何用正则表达式在标签内找到一个文字字符串
- 如何解码类似 JSON 的 JavaScript 对象文字字符串