javascript - 使用Javascript,如何将性别中性文本复数化?

标签 javascript

我正在开发一个 Javascript 函数,当一个人没有选择性别时,基本上可以将“她是”更改为“他们是”。它将允许使用性别中立的文本。我找到了这个脚本,但想看看是否有更好的方法来使文本性别中立。

function personalize(template, options) {
   var GENDERS = ['neutral', 'female', 'male'];
   var PERSONS = ['first', 'second', 'third'];

   var CASES = ['subjective', 'objective', 'possessive', 'reflexive'];
   var PRONOUNS = {
     'first': {
     'subjective': 'I',
     'objective': 'me',
     'possessive': 'my',
     'reflexive': 'myself'
      },
     'second': {
     'subjective': 'you',
     'objective': 'you',
     'possessive': 'your',
     'reflexive': 'yourself'
      },
     'third': {
     'neutral': {
     'subjective': 'they',
     'objective' : 'them',
     'possessive': 'their',
     'reflexive' : 'themself'
     },
     'female': {
     'subjective': 'she',
     'objective' : 'her',
     'possessive': 'her',
     'reflexive' : 'herself'
     },
    'male': {
    'subjective': 'he',
    'objective' : 'him',
    'possessive': 'his',
    'reflexive' : 'himself'
    }
   }
  };

 var VERBS = ['are', 'are|not', 'have', 'have|not'];
 var CONJUGATIONS = {
  'first': {
    'have': 'have',
    'have|not': 'haven\'t',
    'are': 'am',
    'are|not': 'am not'
   },
 'second': {
   'have': 'have',
   'have|not': 'haven\'t',
   'are': 'are',
   'are|not': 'aren\'t'
  },
 'third': {
   'have': 'has',
   'have|not': 'hasn\'t',
   'are': 'is',
   'are|not': 'isn\'t'
 }
 };

var gender = options.gender || 'neutral';
var person = options.person || 'third';
var name   = options.name   || 'Anon';

var result = template;

var ABBREVIATIONS = {
 'have': '\'ve',
 'has': '\'s',
 'are': '\'re',
 'is': '\'s',
 'am': '\'m'
  };

function replaceVerb(str, whitespace, match) {
  var replacer = CONJUGATIONS[person][match];
  return ABBREVIATIONS[replacer] || whitespace + replacer;
   }

for (var i = 0; i < VERBS.length; i++) {
  var verb = VERBS[i];
  result = result.replace(new RegExp('(\\s*){{\\s*(' + verb +    '                 [|not]*)\\s*}}','g'), replaceVerb);
    }

function replacePronoun(str, match) {
 var replacer = '';
  if (person == 'third') {
    if (match.indexOf('|name') > -1) {
      replacer = name;
    } else {
      replacer = PRONOUNS[person][gender][pronoun_case];
    }
   } else {
    replacer = PRONOUNS[person][pronoun_case];
    if (match.charAt(0) == match.charAt(0).toUpperCase()) {
      replacer = replacer.charAt(0).toUpperCase() + replacer.slice(1);
    }
   }
  return replacer;
   }

for (var i = 0; i < CASES.length; i++) {
  var pronoun_case = CASES[i];
  var template_pronoun = PRONOUNS.third.neutral[pronoun_case];
  result = result.replace(new RegExp('{{\\s*(' + template_pronoun +     '[|name]*)\\s*}}','gi'), replacePronoun);
}

return result;
}

最佳答案

JavaScript String 对象具有内置的查找和替换功能。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace

可以像这样使用

var text = "She is a very nice person";
var result = text.replace('She is', 'They are');
console.log(result); // They are a very nice person

关于javascript - 使用Javascript,如何将性别中性文本复数化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33828611/

相关文章:

javascript - 我的导航栏被 Javascript 映射挡住了。如何解决?

JavaScript 对象属性在循环中几次正确迭代后随机变为 NaN

javascript - 如何访问(通过javascript) Angular Material 中的当前主题调色板颜色?

javascript - drawImage Houdini CSS 绘画 API

c# - JavaScript 和 Windows 窗体之间的交互

javascript - lowdb .find 不起作用?

javascript - react native : Native module AppStateModule tried to override AppStateModule for module name AppState

javascript - 单击时 Bootstrap 面包屑进入中心 div

javascript - 用 return 在函数中包装 jquery ajax

javascript - 如何在 Angular.js 中从 html 传输数据?