javascript 查找并替换文本区域中的整个单词

标签 javascript regex

我有一个文本区域,其中包含罗马数字列表,我想通过单击按钮将其转换为阿拉伯数字。我怎样才能只替换整个数字而不替换其他数字的一部分。例如,我有:

XI
XXI
XXXI

我明白了

11
X11
XX11

但我想要

11
XXI
XXXI

我使用的代码是:

function romanToArabic() {

  var str = document.getElementById("textArea").value;

  var mapObj = {
    XI:"11",
    V:"5" 
  };

  var re = new RegExp(Object.keys(mapObj).join("|"),"gi");
  str = str.replace(re, function(matched){
    return mapObj[matched];
  });

  document.getElementById("textArea").value = str;

}

我已经看到了使用\b 的各种解决方案,但我不知道将其放在代码中的位置。谢谢。

最佳答案

我采用了您的规范并使其“正常工作”,作者:

  • 定义正确的正则表达式\b[XIV]+\b(匹配整个罗马数字)
  • 使用您的对象作为映射函数,并在失败时作为后备,mapObj[roman] ||罗马字

脚本不执行的操作:

  • 捕获非法罗马数字,即允许 XIIX
  • 为匹配实现适当的算法,例如 XV,理想情况下应解析为 10 + 5 = 15

function fromRoman(roman) {
  var mapObj = {
    XI:"11",
    V:"5" 
  };
  return mapObj[roman] || roman;
}

function convertFromRoman() {
  var str = document.getElementById("textArea").value;
  var output = str.replace(/\b[XIV]+\b/g, fromRoman);
  document.getElementById("output").value = output;
}

convertFromRoman();
<p>Input:</p>

<textarea id="textArea" style="width:100%; height:50px" onkeyup="convertFromRoman()">
XI
XXI
XXXI
</textarea>

<p/>

<p>Output:</p>

<textarea id="output" style="width:100%; height:50px">
</textarea>

关于javascript 查找并替换文本区域中的整个单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47687615/

相关文章:

javascript - 如何将图像加载到 HTML Canvas

javascript - js 正则表达式清理除数字之外的所有内容

c - POSIX 正则表达式表示法以 @ 开头和结尾,正则表达式表示法包含字母数字字符但必须包含 _

python - 正则表达式 block 中的正则表达式

regex - 使用 sed 更改配置的 Bash 脚本

javascript - Webpack Provide Plugin for global use of Underscore - 错误

javascript - 在 JavaScript 中隐藏/显示 div

javascript - 在 HTML/JavaScript 文件中,如何选择要包含的数据文件?

javascript - ThreeJS 更新 Shape 的尺寸

php - 如何使用 preg_replace 去除过多的单个空格