【问题标题】:Regex Match All Except Leading and Trailing Spaces Around Commas (including comma)正则表达式匹配逗号周围的所有空格(包括逗号)
【发布时间】:2017-06-03 17:15:39
【问题描述】:

我正在尝试匹配所有内容,除了逗号和它们周围的任何空格。但是,我希望它匹配单词之间的空格。这是我目前所拥有的:

/[^,\s][a-zA-Z0-9_ !@#$%^&*()]+/gi

它匹配除逗号和尾随空格之外的所有内容,但包括前导空格。这是测试它的链接regex101

我正在尝试围绕关键术语包装跨度标签。这就是我想要的最终结果:

<span>Some text</span>   ,    <span>Some more     text</span>

我正在使用

.replace(/([^,\s][a-zA-Z0-9_ !@#$%^&*()]+)/gi, "<span>$1</span>")

它会更新 contenteditable div 中的 span 标签。我使用它在关键术语周围使用 CSS 放置气泡,并在每次输入后更新。任何帮助将不胜感激!谢谢!

【问题讨论】:

  • 我目前正在使用.replace(/([^,\s][a-zA-Z0-9_ !@#$%^&amp;*()]+)/gi, "&lt;span&gt;$1&lt;/span&gt;"),它会在每次输入后更新 contenteditable div 中的 span 标签。我将如何合并split()
  • @JamesMarquez 你应该在你的问题中添加你的评论,这会有所帮助;)

标签: javascript regex replace


【解决方案1】:

正则表达式是:

([\s\S]+?)(\s*,\s*|$)

然后在replace() 方法中反向引用两个捕获组:

const regex = /([\s\S]+?)(\s*,\s*|$)/g;

const str = `uncased is a test   ,  vertical this is a tests
80000   ,     bertical
80000     ,       vertical
#303 cardio  endo,  kljafklj\$!asdfkj`;

// The substituted value will be contained in the result variable
const result = str.replace(regex, '<span>$1</span>$2');

console.log(result);

【讨论】:

  • 在您进行编辑之前,它仅在输入逗号后才更新 span 标签。编辑后,它完全按预期工作。非常感谢!
  • 不客气。如果它帮助您找到解决问题的更好方法,您也可以考虑对答案进行投票。
  • 我又做了一个测试(([\s\S]+?) 困扰着我),尝试使用以空格开头的字符串,你将以&lt;span&gt; *multiple spaces* uncased is a test&lt;/span&gt; 结尾,否则效果很好。
  • 没有困难。您只需要在匹配时考虑它,将\s* 添加到正则表达式@romain-aga
  • 也许你可以用它来完成你的答案,然后;)
【解决方案2】:

这样做有效果吗?

/((?:(\w|[-!@#$%^&*()])+( (\w|[-!@#$%^&*()]))*)+)/g

或者

/((?:(\w|[-!@#$%^&*()])+( {1,MAX_NUMBER_OF_SPACES}(\w|[-!@#$%^&*()]))*)+)/g

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-31
    • 1970-01-01
    • 2022-01-05
    • 2012-11-05
    • 1970-01-01
    相关资源
    最近更新 更多