如何使用正则表达式替换.replace脚本的确切值?



我这里有一个javascript替换脚本,通过按钮的onclick激活。

我用它来替换基于一长串数字的数字。

我要做的是:

我有这个清单(请知道这是一个样品,还有大约1000个)

.replaceAll("10,", "80,")
.replaceAll("1,", "75,")
.replaceAll("0,", "65,")
.replaceAll("83,", "50,")

输入10textarea中,如果我点击"更新按钮",它应该变成808657565因为我需要一个精确的值。现在是这样的,修改1080然后08065.

我正在寻找一种快速或干净的方式使用RegEx这样做,也许添加到脚本,我只想改变引号中指定的数字,而不是那些与前面或后面的数字。

下面是我的示例代码:

function fixTextarea(textarea) {
textarea.value = textarea.value.replaceAll("3d ed", "4th ed")
.replaceAll("437,", "511,")
.replaceAll("438,", "512, 517,")

.replaceAll("21,", "24,")
.replaceAll("309,", "357,")
.replaceAll("425,", "491,")
.replaceAll("427,", "493,")
.replaceAll("430,", "496-502,")

.replaceAll("10,", "80,")
.replaceAll("1,", "75,")
.replaceAll("0,", "65,")
.replaceAll("83,", "50,")
};
function fixtext() {
let textarea = document.getElementById("textarea1");
textarea.select();
fixTextarea(textarea);
}
window.addEventListener('DOMContentLoaded', function(e) {
var area = document.getElementById("textarea1");
var getCount = function(str, search) {
return str.split(search).length - 1;
};
var replace = function(search, replaceWith) {
if (typeof(search) == "object") {
area.value = area.value.replace(search, replaceWith);
return;
}
if (area.value.indexOf(search) >= 0) {
var start = area.selectionStart;
var end = area.selectionEnd;
var textBefore = area.value.substr(0, end);
var lengthDiff = (replaceWith.length - search.length) * getCount(textBefore, search);
area.value = area.value.replace(search, replaceWith);
area.selectionStart = start + lengthDiff;
area.selectionEnd = end + lengthDiff;
}
};
});
<textarea id="textarea1" rows="4" cols="50">Witkin & Epstein, Criminal Law (3d ed), Pretrial Proceedings §§ 10, 438,</textarea>
<button class="nbtngreen" onclick="fixtext()">Update</button>

我试过使用.replaceAll("/^10,z/", "80,")之类的东西,但它似乎不起作用。

我很感激任何帮助。我被这个问题困住了,我真的不能再独自解决它了。

可以选择创建一个Map,指定要替换的内容。

然后您可以使用一个模式来匹配1个或多个数字,前面有一个词边界b以防止部分匹配,并使用正向forward直接在右边的(?=,)上断言一个逗号。

在replace的回调函数中,检查该字符串是否存在于Map中。如果匹配,则返回映射值,否则返回原始匹配,保持不变。

一次按下按钮,完成所有的替换。

bd+(?=,)

Regex演示例如:

const mapper = new Map();
mapper.set("10", "80");
mapper.set("437", "511");
mapper.set("80", "81");
function fixtext() {
const elm = document.getElementById("textarea1");
if (elm) {
elm.value = elm.value
.replace(
/bd+(?=,)/g,
m => mapper.has(m) ? mapper.get(m) : m
);
}
}
<textarea id="textarea1" rows="4" cols="50">Witkin & Epstein, Criminal Law (3d ed), Pretrial Proceedings §§ 10,438, this should not change 437 and this should: 437,9999</textarea>
<button class="nbtngreen" onclick="fixtext()">Update</button>

最新更新