【问题标题】:RegEx Data Values Javascript white Space正则表达式数据值 Javascript 空白
【发布时间】:2020-06-17 22:10:29
【问题描述】:

我正在尝试为我收到的数据添加正确的空格。目前是这样显示的

未开始

准备好进行 PPPD 审查

这是我正在使用的代码

.replace(/([A-Z])/g, '$1')

“NotStarted”显示正确的“Not Started”,但“ReadyforPPPDReview”显示“Readyfor P P P D Review”,当它看起来像这样“Ready for PPPD Review”时

使用一个正则表达式或函数来处理这两种情况的最佳方法是什么?

【问题讨论】:

  • 顺便说一句,这些是根据是否已审核或未启动而返回的值。所以它是动态的
  • 你打算如何让正则表达式引擎现在 Readyfor 是两个连接的单词?
  • 他们真的不应该这样。它应该像这样显示“准备好接受 PPPD 审查”我遇到的问题是,因为我添加了正则表达式,它基于骆驼案例它回来了,因为这个“准备好 P P P D 审查”不知道如何处理这个以及“未开始”
  • ReadyforPPPDReview 中的for 字是否也应该有驼峰式大小写?类似ReadyForPPPDReview
  • 不,不幸的是,这不是骆驼肠衣,这是这更困难的原因之一,那么它真的应该是大声笑

标签: javascript regex reactjs


【解决方案1】:

您需要一个 NLP 引擎来正确处理这个问题。以下是两种使用简单正则表达式的方法,它们都有局限性:

1.使用停用词列表

我们在停用词前后盲目加空格:

var str = 'NotStarted, ReadyforPPPDReview';
var wordList = 'and, for, in, on, not, review, the'; // stop words

var wordListRe = new RegExp('(' + wordList.replace(/, */g, '|') + ')', 'gi');
var result1 = str
  .replace(wordListRe, ' $1 ') // add space before and after stop words
  .replace(/([a-z])([A-Z])/g, '$1 $2') // add space between lower case and upper case chars
  .replace(/  +/g, ' ') // remove excessive spaces
  .trim(); // remove spaces at start and end
console.log('str:     ' + str);
console.log('result1: ' + result1);

正如您可以想象的那样,停用词方法有一些严重的局限性。例如,单词formula input 将导致for mula in put

1.使用映射表

映射表列出了需要隔开的单词(不涉及药物),如这段代码sn-p:

var str = 'NotStarted, ReadyforPPPDReview';
var spaceWordMap = {
  NotStarted: 'Not Started',
  Readyfor:   'Ready for',
  PPPDReview: 'PPPD Review'
  // add more as needed
};

var spaceWordMapRe = new RegExp('(' + Object.keys(spaceWordMap).join('|') + ')', 'gi');
var result2 = str
  .replace(spaceWordMapRe, function(m, p1) { // m: matched snippet, p1: first group
    return spaceWordMap[p1] // replace key in spaceWordMap with its value
  })
  .replace(/([a-z])([A-Z])/g, '$1 $2') // add space between lower case and upper case chars
  .replace(/  +/g, ' ') // remove excessive spaces
  .trim(); // remove spaces at start and end
console.log('str:     ' + str);
console.log('result2: ' + result2);

如果您有一个确定的单词列表作为输入,则此方法适用。

【讨论】:

  • @Pdavis33:我很高兴这个答案对你有用。也请考虑投票。
猜你喜欢
  • 2013-07-26
  • 1970-01-01
  • 2021-12-14
  • 2016-02-29
  • 1970-01-01
  • 2017-05-09
  • 1970-01-01
  • 2018-08-16
  • 1970-01-01
相关资源
最近更新 更多