Original text:
"index-wild-selector", "filter-selector", or "list-selector" acting on objects or arrays, or a "slice-selector" acting on arrays. <del> Note that there is no "bald" descendant selector (".." on its own). </del>  3.5.7.2. descendants -- uniquely defined by a relative path -- is tested against a boolean expression "boolean-expr". <del> The current item is selected if and only if the result is "true". </del>  Paths in filter expressions are Singular Paths, each of which selects at most one node. Comparisons are restricted to Singular Path values and primitive values (such as number, string, "true", "false", "null"). <del> Data types are not implicitly converted in comparisons.  So ""13 == '13'"" selects no node. A member or element value by itself in a Boolean context is interpreted as "false" only if it does not exist.  Otherwise it is interpreted as "true".  To be more specific about the actual value, explicit comparisons are necessary.  This existence test -- as an exception to the general rule -- also works with structured values. </del> Alphabetic characters in ABNF are case-insensitive, so "e" can be either "e" or "E". "true", "false", and "null" are lower-case only (case-sensitive). <del> Regular expression tests can be applied to JSON string values (RFC8259) only (on the left-hand side of "=~"); they yield false otherwise. </del> The syntax of regular expressions in the string-literals on the right-hand side of "=~" is as defined in I-D.draft-bormann-jsonpath- iregexp. element or member value as the filter selector iterates over the array or object.  When a path resulting in an empty nodelist appears on either side of <del> a comparison, the result of the comparison is true if and only if the </del>  comparison operator is "==", ">=" or "<=" and the other side of the comparison is also a path resulting in an empty nodelist. and results in a nodelist consisting of a single node is replaced by the value of the node and then: <del> comparison using one of the operators "==" or "!=" produce a "true" comparison result if and only if the comparison is between: </del>  primitive values which satisfy the comparison, or structured values compared using "!=". comparisons using one of the operators "<", "<=", ">", or ">=" <del> produce a "true" comparison result if and only if the comparison is between numeric values which satisfy the comparison. </del>  Note that comparisons between structured values, even if the values <del> are equal, produce a "false" comparison result. </del>  The semantics of regular expressions are as defined in I-D.draft- bormann-jsonpath-iregexp. The logical AND, OR, and NOT operators have the normal semantics of Boolean algebra and consequently obey these laws (where "P", "Q", and "R" are any expressions with syntax "logical-and-expr", "T" is any <del> true expression, such as "1 == 1", and "F" is any false expression, such as "1 == 0"): </del>  3.5.8.3.

Reviewer comments:
Fixes URL
Let's continue in URL
Currently the syntax section of the "Filter Selector" section describes some semantics. These descriptions should be folded into the semantics section.
I'm not sure we are done with this yet. See comments.The reordering looks good to me.

Revised text:
"index-wild-selector", "filter-selector", or "list-selector" acting on objects or arrays, or a "slice-selector" acting on arrays.  <ins> Note that ".." on its own is not a valid selector. </ins> 3.5.7.2. descendants -- uniquely defined by a relative path -- is tested against a boolean expression "boolean-expr".  <ins> The current item is selected if and only if the boolean expression yields true. </ins> Paths in filter expressions are Singular Paths, each of which selects at most one node. Comparisons are restricted to Singular Path values and primitive values (such as number, string, "true", "false", "null").  Alphabetic characters in ABNF are case-insensitive, so "e" can be either "e" or "E". "true", "false", and "null" are lower-case only (case-sensitive).  The syntax of regular expressions in the string-literals on the right-hand side of "=~" is as defined in I-D.draft-bormann-jsonpath- iregexp. element or member value as the filter selector iterates over the array or object. <ins> A singular path by itself in a Boolean context is an existence test which yields true if the path selects a node and yields false if the path does not select a node.  To be more specific about the actual value of a node selected by a path, explicit comparisons are necessary.  This existence test -- as an exception to the general rule -- also works with nodes with structured values. </ins> When a path resulting in an empty nodelist appears on either side of  <ins> a comparison, the comparison yields true if and only if the </ins> comparison operator is "==", ">=" or "<=" and the other side of the comparison is also a path resulting in an empty nodelist. and results in a nodelist consisting of a single node is replaced by the value of the node and then:  <ins> comparison using one of the operators "==" or "!=" yields true if and only if the comparison is between: </ins> primitive values which satisfy the comparison, or structured values compared using "!=". comparisons using one of the operators "<", "<=", ">", or ">="  <ins> yield true if and only if the comparison is between numeric values which satisfy the comparison. </ins> Note that comparisons between structured values, even if the values  <ins> are equal, yield false. Data types are not implicitly converted in comparisons.  So "13 == '13'" yields false. A regular-expression test yields true if and only if the value on the left-hand side of "=~" is a string value and it matches the regular expression on the right-hand side according to the semantics of I- D.draft-bormann-jsonpath-iregexp. </ins> The semantics of regular expressions are as defined in I-D.draft- bormann-jsonpath-iregexp. The logical AND, OR, and NOT operators have the normal semantics of Boolean algebra and consequently obey these laws (where "P", "Q", and "R" are any expressions with syntax "logical-and-expr", "T" is any  <ins> expression that yields true, such as "1 == 1", and "F" is any expression that yields false, such as "1 == 0"): </ins> 3.5.8.3.