我有文本字段的条件,每个字符串在以逗号结尾之前应该有开括号和近括号吗?
示例:
valid text values- stack(2),flow(2),over(4),temp(0)
Invalid - stack(2),flow,over(4),temp(0)
因此,每个字符串在以逗号结尾之前应该有()括号。如何检查这种情况,请指教。
答案 0 :(得分:2)
每次使用RegExp \([^,]+\)
之前计算()的数量,它应该等于逗号数+ 1
以下是包含测试用例的工作解决方案:http://jsfiddle.net/c8t26/1/
function testCases(str){
return (
str.match(new RegExp("\\([^,]+\\)","g")).length == str.split(",").length
);
}
答案 1 :(得分:1)
这是我的解决方案,用逗号分隔字符串,然后用正则表达式过滤,然后与原始大小进行比较。
var a = 'stack(2),flow(2),over,temp ';
var arr = a.split(',');
var temp = arr;
arr = arr.filter(function(el){
var reg = new RegExp(/\(\d+\)$/);
el = el.trim();
return !!reg.test(el)
});
if(arr.length !== temp.length){
alert(temp.length - arr.length + ' wrong');
}
答案 2 :(得分:-2)
使用for循环传递字符串的每个字符。使用标志,例如。 openParentheses你增加每个的计数(并减少每个),如果你最终得到0以外的任何东西它是无效的,如果你最终得到任何小于0的东西它是无效的,在你的情况下如果你不能有更多如果你的变量在循环的任何迭代中大于1,那么它不是一个括号打开它是无效的。如果你也需要寻找昏迷,就在你找到a)检查[i + 1]以查看它是否是逗号时。注意它是否是字符串的结尾,这样你就不会出现越界错误。要么做一个特殊情况(如果),要么添加一些虚拟字符到结尾而不是。)