如何在正则表达式中表示“不包括边界的此字符”
How to express "Not this character including boundary" in a regular expression?
下面的正则表达式匹配所有被单个星号字符紧密包围的序列,这就是斜体文本在 Markdown 中强调的方式。我想格式化文本,包括用于强调的星号。除此之外,我确实允许在序列中使用独立的星号。示例 *This is italic text'n with * in between*
.
/'*[^'*'s]([^'*]|('*'s))*[^'*'s]'*/g
此外,在 Markdown 中,粗体文本通过双星号字符强调非常相似。为了匹配这些,我使用这个正则表达式:
/'*'*[^'*'s]([^'*]|('*'s))*[^'*'s]'*'*/g
两者都有自己的工作,但当一起应用时,粗体文本的内部也会被检测为斜体文本。因此,除了外部星号外,格式化文本既粗体又斜体。为了解决这个问题,我必须表达斜体序列不允许被第二对星号包裹。
问题是[^'*]
需要任何其他字符,因此根本不需要一个字符。如果周围有额外的星号,而仍然在搜索字符串的开头或结尾匹配,我该如何表达上面的第一个正则表达式不匹配?
请注意,我使用 JavaScript,因此没有可用的背后资料。
编辑:由于我误解了这个问题,我向您提出一种具有约束的新模式:
/'*((?:[^'s*]+|'s+'*?)*)?'*/
有趣的是,整个模式包含标记,捕获组包含其中的内容。请注意,内容是可选的("**"
是空内容周围的有效标记)
旧帖子:
您询问的内容是不可能的,因为没有规则可以选择字符串中的哪个星号是结束星号。如果要使用星号作为标记,则必须要求用户转义文本星号。
示例字符串:
*This is italic text'n with '* in between* text *an other italic part* text
要处理此类字符串,可以使用此模式来避免转义字符:
/'*(?:[^*'']+|''{2}|''['s'S])*'*/
你可以
说"没有字符,或者没有*字符":
(^|[^'*])
最有可能的是,字符类中的转义是多余的:
(^|[^*])
这同样适用于结束标记:
($|[^*])
相关文章:
- 在JavaScript中输出转义字符
- 不同浏览器中的空白字符正则表达式行为
- Regex匹配除“”之外的所有字符;.js”;
- 拆分文本以每隔n个字符添加一行新行,并注意空格
- 使用RegExp查找url中的字符
- 如何为jQuery屏蔽输入插件创建一个允许字母数字、空格和重音字符的掩码
- 使用正则表达式将输入格式设置为单字符逗号、单字符逗号等
- 允许在文本框中使用某些字符
- 根据页面的位置突出显示文本中的字符
- 元素的内容必须由格式正确的字符数据或标记组成
- 如何将字符串拆分为字符,但在javascript中保留空格
- 使用Google Maps API向标记添加多个字符
- 仅在边界内时替换特定字符
- 如何在正则表达式中表示“不包括边界的此字符”
- 单词边界是否适用于符号字符
- SVG在Javascript中获取文本字符边界
- 按不在特定边界内的字符分割字符串
- Javascript中不包括连字符的词边界
- 用于单词边界的JavaScript正则表达式,允许单词内的连字符和撇号
- 在javascript中通过正则表达式匹配单词边界处的希伯来字符