我正在尝试制作一个可以计算引号内的每个问号的正则表达式。这个正则表达式正在javascript中测试,但如果重要的话,我打算将它用于PHP。我有一些有用但不够好的东西。
在这里。
/(\"|\')(([^\"\'\\]|\\.)*)\?(([^\"\'\\]|\\.)*(\"|\'))/g
您可能已经看到我也想忽略转义引号。
说我有字符串"hello? \"world?\""
。这将返回1,这是正确的。
但至于"hello? \"world??\""
。这也将返回1,但我想要的是2.我怎样才能做到这一点?
如果我能获得与此完全相反的正则表达式(计算不在引号中的问号),也会额外的爱。
如果有帮助的话,这是用于此测试的整个函数。
function countTest(str) {
regx = /(\"|\')(([^\"\'\\]|\\.)*)\?(([^\"\'\\]|\\.)*(\"|\'))/g;
test = str.match(regx);
test = test ? test.length : 0;
console.log(test);
}
编辑:
另外!我在这个问题中注意到我自己的拼写错误,字符串hello \"world?\'"
也会返回1.但这似乎很容易解决。
答案 0 :(得分:0)
所以我只是尝试了它,显然显示1的原因是,因为test不是作为String处理,而是作为数组处理。所以我会替换
test = test ? test.length : 0;
通过
test = test ? new String(test).length - 3 * test.length + 1: 0;
换句话说,您要从数组的String值中减去3个字符“,”,但添加1,因为第一个数组元素没有逗号字符。
编辑:对于计数问号外引号,只需从字符串中的总问号数中减去上面给出的数字。
编辑:对于PHP,您可能会使用array_slice函数而不是新的String(test),并根据需要调整乘法和加法常量。