使用正则表达式将输入格式设置为单字符逗号、单字符逗号等

Format input with regex to single character comma single character comma, etc

本文关键字:字符 单字符 正则表达式 输入 设置 格式      更新时间:2023-09-26

好吧,无可否认,我的正则表达式技能相当糟糕(我使用正则表达式备忘单构建了这个),在大多数情况下,这很好,但单个字符让我很沮丧。如果我将q w e r t y粘贴到文本框中,我希望返回q,w,e,r,t,y,,但它所做的是返回q,ue,rt,y

$("#niftyInput").bind('paste', function(e) {
    var str = this.value.replace(/('w)['s,]+('w?)/g, '$1,$2').replace(/[^a-zA-Z0-9-,]/g, '');
    if (str!=this.value) this.value = str;
});

Fiddle:http://jsfiddle.net/crunchfactory/435dc37o/

非常感谢!

要理解更大的上下文有点困难,但为什么不只是

$("#niftyInput").bind('paste', function(e) {
    var str = this.value.replace(/['s,]+/g, ',').replace(/[^a-zA-Z0-9-,]/g, '');
    if (str!=this.value) this.value = str;
});

$("#niftyInput").bind('paste', function(e) {
    this.value = this.value.replace(/['s,]+/g, ',').replace(/[^a-zA-Z0-9-,]/g, '');
});

但这与正则表达式无关。

's+(?='w)

['s,]+(?='w)

试试这个。替换为,。请参阅演示。

https://regex101.com/r/sJ9gM7/77

以下是正则表达式的作用:

(''w)[''s,]+(''w?)一个字符至少一个空白或逗号一个或零个字符

当你的输入框中有类似q w e r t y的东西时,它是如何被捕获的:

'q'是一个单词字符,与('w)匹配,因此'q'存储在$1
' '是空白,与['s,]+匹配,请继续
'w'是一个字字符,与('w?)匹配,因此'w'存储在$2中,匹配结束。

这就是为什么q w e r t y返回成对的多个匹配(q,w)(e,r)(t,y),这就变成了q,ue,rt,y

有很多方法可以做你真正想做的事。由于regex在默认情况下是贪婪的,并且会匹配尽可能多的字符,因此您可以这样做:

('w+)['s,]*

('w+)将捕获尽可能长的单词字符序列
然后,['s,]*会将之后的任何空格和逗号视为"匹配"的一部分,而不是$1捕获的一部分。

您可以使用:将空格替换为,

$("#niftyInput").bind('paste', function(e) {
    var str = this.value.replace(/'s+/g, ',').replace(/[^a-zA-Z0-9-,]/g, '');
    if (str!=this.value) this.value = str;
});

工作演示