Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 构建正则表达式_Javascript_Regex - Fatal编程技术网

Javascript 构建正则表达式

Javascript 构建正则表达式,javascript,regex,Javascript,Regex,我对正则表达式有以下问题。 我正在用自动完成创建一个文本区域 (我使用⇥ 用于向您显示\n和␣ (对于空格字符) 一行应该是这样的 1.1␣BMW⇥Red⇥automatic 或 如果textarea的内容如下所示 1.1␣Mercedes.1⇥Blue⇥manual 2␣Chev 我想要匹配的“Chev” 在这种情况下,我希望得到匹配的“Gr” 到目前为止,我使用了以下表达式 new RegExp('^' + '(\\d+(\\.\\d+)?)\\s*(\\S+)' + // f

我对正则表达式有以下问题。 我正在用自动完成创建一个文本区域 (我使用⇥ 用于向您显示\n和␣ (对于空格字符)

一行应该是这样的

1.1␣BMW⇥Red⇥automatic

如果textarea的内容如下所示

1.1␣Mercedes.1⇥Blue⇥manual
2␣Chev
我想要匹配的“Chev”

在这种情况下,我希望得到匹配的“Gr”

到目前为止,我使用了以下表达式

new RegExp('^' +
    '(\\d+(\\.\\d+)?)\\s*(\\S+)' +  // for the first example
    '\\t(\\S+)\\t(\\S+)?' +         // for the second example
    '$',
    'm');
我认为它只是偶然起作用,但在这种情况下它不起作用,这也应该是有效的

1.1␣BMW⇥Red
2␣Chev
(这里我想得到“Chev”)

我想用正则表达式自动完成。结果用于从以textarea中匹配字符串开头的数组中获取字符串。 第一列(汽车品牌)用于搜索不同的数组,然后第二列(颜色)。第三个是可选的,可以忽略。开头的数字对于匹配也不重要

我真的不是一个正则表达式专家,但我试图找出一个解决方案。。。但现在我受不了了


感谢您的帮助

此模式可以满足您的需要:
/[^\s]+$/
。看看这是否符合您的期望:

var re = new RegExp(/[^\s]+$/);
var matches = textValue.match(re);
if (matches) {
    // Use matches[0] for your autocomplete since there are no capture groups
}

第二部分缺少括号。你认为你让整个第二部分成为可选的,但你只是让最后一个词成为可选的。甚至它们之间的选项卡(不是每个帖子的选项卡)也不是可选的

new RegExp('^' +
    '(\\d+(\\.\\d+)?)\\s*(\\S+)' +  // for the first example
    '(\\t(\\S+)\\t(\\S+))?' +         // for the second example
    '$',
    'm');

您的意思是只需要获取最后一块非空白字符吗<代码>/\S+$/?您真的需要验证输入吗?我刚刚尝试了您所做的编辑,我的答案似乎有效。我不确定你是否打算在单词中匹配句点;如果没有,只需从表达式中删除
\.
。另外,我想提到一个非常有用的调试/测试正则表达式的工具:
var re = new RegExp(/[^\s]+$/);
var matches = textValue.match(re);
if (matches) {
    // Use matches[0] for your autocomplete since there are no capture groups
}
new RegExp('^' +
    '(\\d+(\\.\\d+)?)\\s*(\\S+)' +  // for the first example
    '(\\t(\\S+)\\t(\\S+))?' +         // for the second example
    '$',
    'm');