用正则表达式插入符号
为什么用正则表达式插入符号
var a = "1ab";
a = a.replace(/[^\d][a-z]/g, "");
删除 “A” 和 “B” 代替?我认为它应该只删除“b”,因为“a”前面有一个我被[^ \ d]排除的数字。
谁能帮帮我?
它将它们删除,因为你的角色类别[^\d]
表示“任何不是数字的东西”。 ^
表示“不”,而\d
表示“数字”。所以你的表达的意思是“匹配任何不是数字后跟任何小写字母”,匹配"ab"
。
要删除没有一个数字在他们面前的只有小写字母,它可能是最容易捕获组做到这一点:
a = a.replace(/([\d][a-z])[a-z]/g, "$1");
,上面写着:匹配一个数字,然后按小写字母(作为一个组),然后是一个小写字母(在组外),并将其替换为组的内容。如果您想从"1abc"
删除"c"
,请在最后一个[a-z]
后添加+
,例如:/([\d][a-z])[a-z]+/g
。
啊。得到它了!那么表达式是什么:所有字符都不是前面的数字? – heinob 2012-07-20 08:02:24
@heinob:我添加了一个表达式来帮助'1ab',但它不像“没有数字前面的所有字符”一般。 – 2012-07-20 08:04:44
你的正则表达式用于替换一个不是数字的字符,后面跟着一个没有空格的字符,并替换它找到的所有匹配。
在您的字符串1ab中,它将首先匹配a
而不是数字,然后b
作为a-z,因此您的字符串中将保留“1”。
如果你想找到一个字母出了一些后续并提取了这一点,我建议这样的:
var match = a.match(/\d[a-z]/);
if (match) {
var result = match[0];
}
你想要什么可能是negative lookbehind,换句话说,正则表达式应该是/(?!<\d)[a-z]/g
。这个发现任何(小写)字符之前没有数字(我猜是你想要的,因为你只希望b被删除)。
JavaScript没有它们。 (不是我的DV,顺便说一句) – 2012-07-20 08:05:11
没错,我没有发现它是JS。那么明显的解决方案就是使用一个人们已经涉及的捕获组。 – Thor84no 2012-07-20 08:09:26
你的正则表达式是做什么它说:
var a = "1ab";
a = a.replace(/[^\d][a-z]/g, "");
...............a....b
它与“”替换AB
如果你想更换不仅没有一个数字preceeded字母,你可以这样做:
a.replace(/([^\d])[a-z]/g, "$1");
............a.....b ......a
它用第一个匹配“a”取代ab
'a = a.match(/ [^ \ d] [az]/g,“”);'试试这个和你会看到你的代码匹配 – Bob 2012-07-20 08:06:24
正如你可以从答案中看到的,有很多人可以帮助你做到这一点,但是你可能想要更准确地知道你到底想要什么。有很多方法去除b,如果你指定了你的规则是什么,哪些东西要保留,哪些要丢弃,那将是很好的方法。 – Thor84no 2012-07-20 08:06:48
感谢您的建议。我明白你的意思!在这种特殊情况下,我实际上不明白为什么RegExp以这种方式行事。当然,这背后有一项编程任务,但与这个特殊问题无关。我是RegExp的新手,我不知道捕获组甚至存在。现在我做:-) – heinob 2012-07-20 12:49:05