javascript 正则表达式:选择字符串的一部分时忽略标点符号

t1qtbnec  于 2022-12-28  发布在  Java
关注(0)|答案(3)|浏览(117)

我正在寻找一种方法来选择一个字符串的一部分,标点符号的基础上,字符串没有标点符号。
例如,
哦,天哪。就是这个。哦。
我想选择Oh, my goodness.(注意后面的句点)。我必须搜索的字符串是:
哦我的天啊
我一直在四处寻找解决这个问题的方法,但我似乎找不到一个好的答案。有人能帮我吗?

xn1cxnb4

xn1cxnb41#

你的问题缺少一些细节,所以这里有一些假设:

  • 您的空格分隔搜索项是要查找的单词序列,例如搜索项foo bar将找不到some bar foo text输入
  • 你的搜索项应该忽略非单词字符,例如foo bar将查找some foo, bar textsome foo: bar text
  • 您希望在输入中的任何位置查找搜索项
  • 包括尾点(如有)(例如,不需要)

如果某些假设不正确,可以根据需要调整正则表达式。
带有匹配和替换示例的代码:

const input = 'Oh, my goodness. This is it. Oh.';
const searchTerm = 'oh my goodness';

const regex = new RegExp('\\b' + searchTerm.replace(/ +/g, '\\W+') + '\.?', 'i');
console.log({
  match: input.match(regex),
  replace: input.replace(regex, '<b>$&</b>')
});

输出:

{
  "match": [
    "Oh, my goodness."
  ],
  "replace": "<b>Oh, my goodness.</b> This is it. Oh."
}

正则表达式构造的解释:

  • '\\b'--单词边界(如果要在输入字符串的开头搜索,请替换为'^'
  • searchTerm.replace(/ +/g, '\\W+')-允许任何非字字符,如,:
  • '\.?'--包括可选点
  • 'i'-忽略大小写的正则表达式标志
vyswwuz2

vyswwuz22#

您可以替换所有空格以接受单词之间的字符

const text = 'Oh, my goodness. This is it. Oh.';
const search = 'oh my goodness';

const expression = new RegExp(`${search.replace(/ /g, '.*')}[^.]*\\.*`, 'i');

const [match] = expression.exec(text);

console.log(match)
bttbmeg0

bttbmeg03#

第一个月

  • [^.]*[^.]*检查句子的开头和结尾
  • \b(oh|my)\b.匹配句子中的单词ohmy
  • (?=goodness)是一个正前瞻。我们告诉正则表达式:“* 搜索我的字之前善良*”
  • 此外,我们还使用g(全局)和U(非贪婪)正则表达式标志。

简而言之,正则表达式将匹配所有包含所提到单词的句子,并将给定行分成匹配的句子。
regex101.com

相关问题