正则表达式删除子字符串和其他字符

时间:2016-10-13 23:20:02

标签: javascript regex

我有以下字符串

var myName = 'names:(taga || tagb || tagc)'

和这个正则表达式删除名称:括号

  myName = myName.replace(/(names:)?\s*\(?([^)]*)(\)$)?/, '$2').trim(); 

,myName的输出为:taga||tagb||tagc

我有另一个

var myName2 = 'names:tag1names: || names:tag2 || names:tag3'

我希望返回:tag1names:||tag2||tag3,但会返回tag1names:||names:tag2||names:tag3

我可以使用正则表达式删除||之前每个字符串的第一个名称所以它适用于两种情况

两个输入字符串:

'names:(taga || tagb || tagc)' -> return taga||tagb||tagc
'names:tag1name: || names:tag2 || names:tag3' -> return tag1name:||tag2||tag3

1 个答案:

答案 0 :(得分:1)

不完全确定您的完整用例,但可能:

// try a sample
myName = "names:(taga || tagb || tagc)\nnames:tag1names: || names:tag2 || names:tag3";

// revised regex
myName = myName.replace(/(?:(?:\bnames:)?\s*\(([^)]*)\)|\bnames:)/g, '$1').trim();

// results in stripped output
myName == "taga || tagb || tagc\ntag1names: || tag2 || tag3"

我简化了你的一些正则表达式:

  • 您可以使用(?:regex)忽略匹配的群组。
  • 您可以使用|来匹配不同的替代表达式。
  • 当匹配组处于不匹配的替代方案中时,相应的捕获将为空白。
  • 我使用g选项替换所有匹配。
  • 您可以使用\b确保您匹配字词。

您可以使用https://regex101.com/等工具进行验证和试验。我添加了这个特定的正则表达式:https://regex101.com/r/NEgbTu/1

祝你好运!