求正则表达式
求正则表达式,在字符中找出:符合 行开始+任意字符+"click"+任意多个空格+"()"+任意字符+行结束但是不符合 行开始+任意字符+"on_click"+任意多个空格+"()"+任意字符+行结束并且要把 "click"+任意多个空格+"()" 作为捕获组。麻烦回答时测试一下:<html><body><input type="textarea" name="in_1"><input type="textarea" name="in_2"><input type="button" name="bt_1" onclick="javascript:on_bt1Click();"></body></html><script language="javascript">document.all.in_1.value="asdgon_click()asd\nasdfclick()asdf\nasdfclick ()\n";function on_bt1Click() {var in1 = document.all.in_1.value;var in2 = in1.repalce(/你的正则表达式/g,"on_click()");document.all.in_2.value = in2;}</script>如果所有click()都被替换而on_click()没有被替换,说明正确。给出答案的时候麻烦给我解释一下,另外(?!on_)approve\s*\(\)为什么不行也请解释一下。
参考答案:/(?:on_|)click *\(\)/g
只改了你一点点东西,应该不难理解吧。你那样写过不了的原因我认为是因为负向预查不消耗字符数,具体点说就是,虽然on_click的时候不发生替换,但是接下来进行的是n_click,这样一来,就发生替换了。
\s等价于[\f\n\r\t\v],这个范围有点大了,像你描述的情况,我觉得一个空格符足够了