我正在尝试匹配only字符串中字符的第一个实例,例如sdtmig-3-1-2
with XPath::替换 https://www.w3.org/TR/xpath-functions/#func-replace并将其替换为/
这样得到的字符串就是sdtmig/3-1-2
。除了其中包含一个或多个破折号之外,我无法保证该模式的任何其他内容。我很难找到一个始终与特定的第一个实例匹配的正则表达式模式-
.
我觉得我已经接近:
(?:.+?)(-)(?:.+)
但这也匹配完整的字符串,所以它不好。
请不要提供使用除普通正则表达式之外的任何内容的解决方案https://regex101.com https://regex101.com. 正则表达式的“风格”应该遵守 XPath/XQuery 语义(https://www.w3.org/TR/xmlschema-2/#regexs https://www.w3.org/TR/xmlschema-2/#regexs)。我无法控制正则表达式搜索上的全局标志。
无需介绍g(全局标志) https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/global#Description,正则表达式最多匹配一次。这相当于普通的replace https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace打电话像'sdtmig-3-1-2'.replace('-', '/')
这导致"sdtmig/3-1-2"
.
请看一个普通正则表达式用法(确保全局修饰符已关闭并使用/-/正则表达式替换为/) https://regex101.com/r/a0Ivtj/1.
例如:
console.log('sdtmig-3-1-2'.replace(/-/, '/'));
使用全局标志,它将替换所有出现的情况:
console.log('sdtmig-3-1-2'.replace(/-/g, '/'));
您还可以在第一次出现之前使用任何内容的延迟前缀匹配,并将匹配的组替换为其原始内容,以便它们环绕被替换的字符。请参阅正则表达式:
(.*?)-(.*)和替代$1/$2 https://regex101.com/r/Ge2AhY/1。
这应该与XQuery 替换功能 https://www.w3.org/TR/xquery-operators/#func-replace.
console.log('sdtmig-3-1-2'.replace(/(.*?)-(.*)/, '$1/$2'));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)