是否有可能/建议解析我的用户输入字符串 w 正则表达式
Would it be possible/advisable to parse my user input string w regexp?
我正在尝试根据以下规则拆分字符串。
test1 test2 test3 => [test1, test2, test3]
test1 test2:a b test3:c d => [test1, test2:a b, test3:c d]
test1 test2:"a b" test3:c d => [test1, test2:"a b", test3:c d]
我可以抛出更多的例子,但本质上,每个空格分隔的单词都应该是它在结果列表中自己的条目,除非该单词出现在冒号之后。此时,间隔的单词应被视为前一个单词的一部分,直到分号前面的下一个单词。
我这样做是为了创建我自己的小搜索引擎的初始阶段,我需要一种方法来解析用户给出的输入。我试图避免强迫用户做这样的事情
test1 test2:(a, b) test3:(c, d)
虽然我想如果它更美观就好了。
我相信这可以通过javascript正则表达式来完成,但老实说,我对它们很糟糕,并且无法理解它们如何在一半的时间工作。
谁能给我关于如何以这种方式拆分字符串的建议,正确的正则表达式或其他更可取的方法?
谢谢!
编辑:
我已经有一些代码可以进行一些解析而不是使用正则表达式,但它已经变得又长又复杂了。这个问题主要是看看正则表达式是否是更好的方法。
编辑2 :
完全放弃正则表达式方法。Salman A想出了一个非常简洁的方法,可以做我想做的事,击败了我以前的代码。
我知道我应该解析它:
function parseQuery(query) {
var tokens = query.split(/'s+/), i = 0, prev, curr;
while (i < tokens.length - 1) {
curr = tokens[i];
next = tokens[i + 1];
if (curr.indexOf(":") >= 0 && next.indexOf(":") < 0) {
tokens.splice(i, 2, curr + " " + next);
} else {
i++;
}
}
return tokens;
}
var tests = [
'test1',
'test1 test2',
'test1 test2 test3',
'test1 test2:a b test3:c d',
'test1 test2:a b test3:c d e',
'test1 test2:a b test3:c d e test4:f',
], i;
for (i = 0; i < tests.length; i++) {
console.log(tests[i], parseQuery(tests[i]));
}
<!-- results pane console output; see http://meta.stackexchange.com/a/242491 -->
<script src="http://gh-canon.github.io/stack-snippet-console/console.min.js"></script>
相关文章:
- 使用javascript搜索具有用户输入的数组
- React Native通过Navigator将用户输入数据传递到选项卡栏IOS中的组件
- 我想在AngularJS应用程序中创建一个输入数字框,用户不应该在该框上键入十进制数字.(一个整数输入框)
- 如何使用JavaScript中的用户输入创建序列/序列
- 如何在用户输入时实例化数组
- 如何从客户端的数组中获取用户输入和返回值
- 如何在用户输入 javascript 时更改值
- 如何从多个不同的html页面获得mongodb文档的用户输入
- 阻止用户将脚本输入wordpress post
- PayPal按钮是否有一个简单的选项,其中金额基于一些用户输入
- 从表单中获取用户输入执行计算(操作顺序)并输出回该表单
- 我确实有一个表单,如果用户输入了输入,它应该检查否定或空的输入框,并抛出一条警告消息
- 用于输入用户信息的动态PHP代码
- 在MongoDB中输入用户名数组,并返回相同大小的id数组,对于不存在的用户名为null或false
- 如何通过文本字段输入用户数据,然后在文本字段的正下方显示
- 脚本自动输入用户凭据
- 如何获取用户文本输入用户创建输入的值,jQuery
- 在网站服务器上存储表单/输入/用户首选项数据有哪些不同的方法?
- 使用if语句输入用户文本
- 不能在indexedDB中输入用户信息后立即提取用户信息