可能我做错了,我找到了一个正则表达式来实现PHP和C#中所需的替换,但是将它应用于javascript失败了。
示例:
text ( 4 |-4 | 1 "test" ) [ 0 50 90 ]
应该清理到:
text(4|-4|1 "test")[0 50 90]
如您所见,我删除括号前后的所有空格和|。
到目前为止我的代码:
// remove whitespaces around brackets []
text = text.replace(/\s*\[\s*(.*?)\s*]\s*/g, '[$1]');
// remove whitespaces around brackets ()
text = text.replace(/\s*\(\s*(.*?)\s*\)\s*/g, '($1)');
// remove all whitespaces around | (FAILS)
// text = text.replace(/\s*\|\s*(.*?)\s*\|\s*/g, '|$1|');
// text = text.replace(/\s*|\s*/, '$1');
看起来也太复杂了。
我想知道每个标志的正则表达式。
并非所有替代品都在一个正则表达式中,因为学习我希望每行更换一次。
答案 0 :(得分:5)
这样可以解决问题:
var text = 'text ( 4 |-4 | 1 "test" ) [ 0 50 90 ]';
text = text.replace(/\s*([|()[\]])\s*/g, '$1');
alert(text)
这个正则表达式查找(可选)空格,然后,在一个capature组中,一个不能有边界空格的字符,然后是另一个可选的空格,并用所有字符替换所有这些空格,有效地删除空格。
现在,如果您想将替换放在单独的行上,并且只替换空格字符,保留其他空格,请尝试以下操作:
var text = 'text ( 4 |-4 | 1 "test" ) [ 0 50 90 ]';
text = text.replace(/ *([|]) */g, '$1')
.replace(/ *([(]) */g, '$1')
.replace(/ *([)]) */g, '$1')
.replace(/ *([[]) */g, '$1')
.replace(/ *([\]]) */g, '$1');
alert(text)
或者这个:
var text = 'text ( 4 |-4 | 1 "test" ) [ 0 50 90 ]';
text = text.replace(/ *(|) */g, '$1')
.replace(/ *(\() */g, '$1')
.replace(/ *(\)) */g, '$1')
.replace(/ *(\[) */g, '$1')
.replace(/ *(\]) */g, '$1');
alert(text)
对于单个字符,字符类有点矫枉过正,但是你需要转义()[]
。 (就像我在最后一个片段中所做的那样)
答案 1 :(得分:2)
诀窍是正确地逃避保留的字符,因此单个error_reporting(E_ALL);
变为isset($_GET["test"])
,依此类推。管道也是保留字符,因此您需要执行相同的操作:
[