【发布时间】:2021-02-16 08:13:06
【问题描述】:
我正在编写 JavaScript 代码。目的是在输入 textarea 时将句号字符 (Hello world. Hi) 之后的每个单词的第一个字符变为大写。
为此,我正在使用以下代码……
$('#div2').on('input', function (evt) {
var re = /(^|[.!?]\s+)([a-z])/g;
var box = evt.target;
var stringStart = box.selectionStart;
var stringEnd = box.selectionEnd;
var val = $(evt.target).val().replace(re, function (m, $1, $2) {
return $1 + $2.toUpperCase()
});
$(evt.target).val(val);
box.setSelectionRange(stringStart, stringEnd);
});
按预期工作。 但现在我希望它应该跳过一些像(美国)这样的词。如果在文本中键入单词 U.S.A.,则下一个单词的第一个字符不应为大写。
E.g.
U.S.A. is the //Expected
U.S.A. Is the //what i am getting (wrong)
为了实现这一点,我写了下面的代码,但没有按预期工作。
var skipWordUpper = ['U.S.A.', 'Inc.'];
$('#div2').on('input', function (evt) {
var re = /(^|[.!?]\s+)([a-z])/g;
var box = evt.target;
var stringStart = box.selectionStart;
var stringEnd = box.selectionEnd;
var str = $('#div2').val();
var beforeSpace = str.split(" ").splice(-2)
var foundPresent = $.inArray(beforeSpace[0], skipWordUpper) > -1;
if (!foundPresent) {
var val = $(evt.target).val().replace(re, function (m, $1, $2) {
return $1 + $2.toUpperCase()
});
$(evt.target).val(val);
box.setSelectionRange(stringStart, stringEnd);
}
});
请任何人帮助找出我所犯的错误并将我置于正确的位置。 或常规 exp 的任何变化。是必须的。 为我对 JAVASCRIPT 的糟糕知识道歉
【问题讨论】:
-
您是否打算使用缩写白名单,在此之后第一个字符的大写不应该发生。或者您是否假设任何一组单个字符后跟一个点字符是这样的
-
是的@yunzen,这就是终极目标。
-
以上哪一项?
-
是的,我有一组单词后面跟着(。)例如公共汽车。 , Co. 等。后面的词不能大写
-
所以你在考虑白名单?
标签: javascript regex string replace lookbehind